`
龙哥IT
  • 浏览: 258284 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

加载网络数据以及网页链接

 
阅读更多

 

用WebView加载数据,如果只是Http网页链接,直接用LoadUrl加载即可,如果是网页数据或者是js代码,直接用loadDataWithBaseURL方法即可, 如果想在WebView中调起到某个APP或者调起支付,则必须用WebView.setWebChromeClient方法,可以操作Javascript dialogs(js脚本对话框), favicons(添加收藏的标志), titles(标题), 和 progress(进度条)等页面点击事件以及自动跳转等事件处理,如果直接用webview.setWebViewClient达不到想要的效果,因为webview.setWebViewClient只是加载Html网页以及加载数据,无法处理内部js事件,        所以,为了达到所有效果,这两个方法都写上,会起到意想不到的效果 
  setWebChromeClient讲解:
主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等页面点击事件以及自动跳转等事件处理 ,老点的代码里面点击事件不是直接返回url,而是通过message方式返回,必须获取message里面的数据,然后通过
 WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(mChromeWebView);  //此webview可以是一般新创建的
                resultMsg.sendToTarget();
  • 方式传给setWebChromeClient里面的shouldOverrideUrlLoading事件,然后通过loadurl加载;
  • return false:表示不需要手动处理事件,但是依然发送resulMsg会导致一个未知的结果,
  • return true代表这个主机应用会创建一个新的窗口 获取数据,然后手动处理,如果需要在返回数据后做一些处理,比如调起第三方,则必须返回true才能达到自己想要的效果
webview.setWebViewClient 讲解:
主要帮助WebView处理各种通知、请求事件的如果除了加载HTML的话,只需要用WebViewClient即可,但是在进行兼容互联网上附加javascript的页面的时候和调用javascript对话框的时候,或者功能较为复杂的内嵌操作的时候,建议使用WebChromeClient 。
 
setWebChromeClient、setWebViewClient 两者不同之处:
如果你的WebView只是用来处理一些html的页面内容,只用WebViewClient就行了,如果需要更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient
 
另外:setSupportMultipleWindows(),默认的是false,也就是说WebView默人不支持新窗口,但是这个不是说WebView不能打开多个页面了,只是你点击页面上的连接,当它的target属性是_blank时。它会在当前你所看到的页面继续加载那个连接。而不是重新打开一个窗口。

当你设置为true时,就代表你想要你的WebView支持多窗口,但是一旦设置为true,必须要重写WebChromeClient的onCreateWindow方法。

我之前就是没写这个方法,害的自己花费了大半天时间差原因,为什么不调起第三方应用,最后才找到原因

 
  webview.setWebChromeClient(new WebChromeClient());
        WebSettings webSettings = webview.getSettings();
        webSettings.setGeolocationEnabled(true);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webSettings.setAllowFileAccess(true);
        webSettings.setAppCacheEnabled(true);
        webSettings.setDatabaseEnabled(false);
        //SupportMultipleWindows默认的是false,也就是说WebView默人不支持新窗口,但是这个不是说WebView不能打开多个页面了,只是你点击页面上的连接,当它的target属性是_blank时。它会在当前你所看到的页面继续加载那个连接。而不是重新打开一个窗口。
        //当你设置为true时,就代表你想要你的WebView支持多窗口,但是一旦设置为true,必须要重写WebChromeClient的onCreateWindow方法。
        webSettings.setSupportMultipleWindows(true);

        //        打开页面时, 自适应屏幕:
        webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放 将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true);// 缩放至屏幕的大小
        webSettings.setLoadsImagesAutomatically(true);  //支持自动加载图片
        webSettings.setDomStorageEnabled(true); //不设置此 无法加载h5
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);  //支持js调用window.open方法

        webview.setWebChromeClient(webChromeClient);
        JsCallbackObject jsCallbackObject = new JsCallbackObject(baseActivity);
        webview.addJavascriptInterface(jsCallbackObject, "jsCallbackObject");
        webview.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onCreateWindow(WebView webView, boolean b, boolean b1, Message resultMsg) {
                WebView mChromeWebView = new WebView(baseActivity);
                mChromeWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView webView, String url) {
                        if (url.startsWith("alipay://") || url.startsWith("wechat://") || url.startsWith("weixin://") || url.startsWith("alipays://") || url.startsWith("safepay://")) {
                            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                            baseActivity.startActivity(intent);
                        } else {
                            mChromeWebView.loadUrl(url);
                        }
                        return true;
                    }
                });
                WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(mChromeWebView);  //此webview可以是一般新创建的
                resultMsg.sendToTarget();
                return true;
            }
        });
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.v("logger", url + "====url");
                super.shouldOverrideUrlLoading(view, url);
                if (url.startsWith("alipay://") || url.startsWith("wechat://") ||url.startsWith("weixin://") ||url.startsWith("alipays://") ||url.startsWith("safepay://") ) {
                    Intent intent =new  Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    baseActivity.startActivity(intent);
                }else {
                view.loadUrl(url);
                }
                return true;
            }

            @Override
            public void onPageFinished(WebView webView, String s) {
                super.onPageFinished(webView, s);
                String title = webview.getTitle();
                if (!TextUtils.isEmpty(title)) {
                    tvTitle.setText(title);
                }
            }
        });
        //webview跳转支付原生APP,通过关键字识别
        if (url.startsWith("alipay://") || url.startsWith("wechat://") || url.startsWith("weixin://") || url.startsWith("alipays://") || url.startsWith("safepay://")) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            baseActivity.startActivity(intent);
        } else if (url.startsWith("http")) {
            webview.loadUrl(url);
        } else {//如果只是网络数据,则用loadDataWithBaseURL直接加载
            webview.loadDataWithBaseURL(null, url, "text/html", "utf-8", null);
        }

 

 

分享到:
评论

相关推荐

    网络爬虫爬取网页链接

    在本程序中,重点在于实现爬虫抓取网页链接的功能,这是一个核心的网络爬虫任务,通常用于数据挖掘、搜索引擎索引、网站分析等应用场景。 爬取网页链接的过程通常分为以下几个步骤: 1. **发起请求**:首先,爬虫...

    易语言提取网页中链接地址

    提取网页链接,就是找到所有`<a>`标签并获取其`href`属性的值。在易语言中,这通常涉及字符串处理和正则表达式等技术。 易语言提取网页链接的步骤大致如下: 1. **加载网页内容**:首先需要通过HTTP请求获取网页的...

    全文检索在线预览超好网页链接

    标题中的“全文检索在线预览超好网页链接”暗示了我们今天将探讨的是与网络上的全文检索和在线预览技术相关的优质网站。全文检索是指在互联网上搜索文档时,能够检索到文档内容的每一个词,而不仅仅是标题或元数据。...

    获取指定网页上所有链接

    标题“获取指定网页上所有链接”所涉及的知识点主要集中在网页数据抓取和解析领域,这一过程通常称为网络爬虫或网页抓取。下面将详细解释这个过程,并结合描述中的“小东东”(即简单工具)进行阐述。 首先,我们要...

    Java抓取网页数据Demo

    在IT领域,网络数据抓取是一项重要的技能,特别是在大数据分析、搜索引擎优化和市场研究中。本文将详细讨论如何使用Java语言来抓取网页数据,包括两种主要方法:直接抓取原网页内容和处理网页中的JavaScript返回数据...

    易语言正则提取网页数据

    在易语言中,处理网络数据和提取网页信息是常见的任务,特别是在大数据分析、网络爬虫等应用中。本节将详细讲解如何使用易语言进行正则表达式操作,以及如何提取网页数据。 1. **正则表达式基础** 正则表达式...

    基于Python的网页数据爬虫设计分析.pdf

    网络爬虫是一种自动化的网络信息收集程序,能够按照特定规则,自动遍历网页链接,下载网页内容,并进行分析和存储。在大数据时代背景下,网络爬虫的应用越来越广泛,不仅用于搜索引擎和网站备份,也被广泛应用于科学...

    影刀RPA系列公开课3:网页自动化——数据抓取.rar

    数据抓取是RPA中的一个重要环节,尤其在网络时代,大量的信息都存储在网页上。数据抓取技术可以帮助我们自动化收集、整理这些数据,为决策提供依据。在课程中,你可能会学到以下知识点: 1. **HTML基础**:理解HTML...

    网页数据采集

    网页数据采集,也被称为网络爬虫或Web抓取,是一种技术手段,用于自动化地从互联网上获取大量信息。这项技术广泛应用于数据分析、市场研究、新闻监控、搜索引擎优化等多个领域。在进行网页数据采集时,我们需要了解...

    多线程获抓取网页链接(含数据库)

    本项目涉及到了多线程编程、XML文件操作、数据库管理和正则表达式的实际应用等多个方面,这些技术的综合运用不仅提高了网页链接抓取的效率,还确保了数据处理的准确性和完整性。通过对这些技术的理解和掌握,可以...

    鼠标滚轮到最底端继续加载新数据思路

    "鼠标滚轮到最底端继续加载新数据思路"是一种优化用户体验的技术,通常被称为“无限滚动”或“滚动加载”。这种技术允许用户在不离开当前页面的情况下,只需滚动页面至底部,系统就会自动加载更多的内容,为用户提供...

    运用正则抓取网页数据

    在IT行业中,网络数据抓取是一项重要的技能,特别是在大数据分析、搜索引擎优化(SEO)和市场研究等领域。"运用正则抓取网页数据"的主题聚焦于使用正则表达式(Regular Expression,简称Regex)来提取网页中的有用...

    获取网页内部链接

    在IT行业中,获取网页内部链接是一项常见的任务,特别是在网络爬虫和数据分析领域。这个特定的代码片段利用了Internet Explorer...这对于网络数据挖掘、网页分析和其他需要大量处理网页链接的应用来说是非常有价值的。

    Java爬虫网页上的所有链接网址.zip_java 网页爬虫_java网页爬虫_爬取所有链接_网页爬虫链接

    运行这个程序时,Java虚拟机(JVM)会加载并执行这个字节码,实现网页链接的爬取功能。 总的来说,这个Java爬虫项目专注于获取网页上的所有链接,对于初学者而言,这是一个很好的学习资源,能够帮助理解网络爬虫的...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    这些数据在用户打开网页时不会立即展示,而是在页面加载之后通过JavaScript异步调用接口进行加载。这类数据的抓取对爬虫来说是一个挑战,因为爬虫默认情况下只能获取初始加载的HTML内容,而不会执行任何JavaScript...

    Android-AndroidRichText富文本解析器支持网络图片图片和链接点击事件

    这样,开发者可以轻松地将网页上的内容或者格式化的文本数据展示在Android应用中。例如,通过使用此解析器,可以将包含`<img>`标签的HTML字符串解析成包含网络图片的TextView,而`<a>`标签则可以被解析成可点击的...

    android 获取网页,显示加载进度

    本篇将详细介绍如何使用Android的`HttpClient`进行网页数据获取,结合`AsyncTask`进行后台任务处理,并在`WebView`中展示网页内容及加载进度。 首先,`HttpClient`是Android早期用于网络请求的API,它允许开发者...

    页面无限加载展示

    当用户滚动到页面底部时,JavaScript检测到这一事件并触发新的数据请求,服务器返回更多数据,然后这些数据被动态添加到现有列表中,形成无缝的加载体验。 二、JavaScript的角色 1. 监听滚动事件:通过`...

    python网络爬虫爬取整个网页

    Python网络爬虫是一种用于自动化获取网页内容的程序,它能够帮助我们从互联网上抓取大量信息,例如新闻、数据、文章等。在这个过程中,我们主要会用到Python的一些库,如requests、BeautifulSoup和Scrapy等。下面...

    VB.NET网页源码爬取.zip

    这个VB.NET爬虫示例对于初学者来说是一个很好的学习资源,可以帮助他们理解如何在.NET环境中编写爬虫,以及如何使用正则表达式进行数据提取。同时,对于有经验的开发者,这个示例也可以作为一个快速实现网页信息抓取...

Global site tag (gtag.js) - Google Analytics