美文网首页
WebView技巧与问题收集

WebView技巧与问题收集

作者: JinWu_1689 | 来源:发表于2020-08-28 07:28 被阅读0次

1.打印html的console.log的方法

webview.setWebChroomeClient(new WebchromeClient() {
// 重载
public void onConsoleMessage(String message, int lineNumber,String sourceID) {
Log.d(TAG, message + " from line " + lineNumber + "of" + sourceID);
}
}

2.url带#,且只改#后的值不刷新问题

如地址:https://xxxx.com#AA => https://xxxx.com#BB,则loadUrl不会去刷新数据将BB传给界面。
解决办法动态加一个?参数值
https://xxxx.com?arg=AA#AA ,https://xxxx.com?arg=BB#BB, arg为随意定的一个参数

3.利用WebView抓取非静态页面数据

网页数据的生成很多时候是由js执行后产生,此时若只是将网页当数据接口的去请求,则得到的数据往往只是简单的带js脚本的数据。此方法是介用webview执行完url,js后读取结果数据。

private void initWebView() {
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.addJavascriptInterface(this,"local_obj"); //注入Android本地方法所在对象给js层
        WebViewClient client = new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                Log.e("webview", "shouldOverrideUrlLoading: " + request.toString());
                return super.shouldOverrideUrlLoading(view, request);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                Log.e("webview", "onPageFinished: " + url);
              // js层读取html并将调用Android的本地方法
                view.loadUrl("javascript:window.local_obj.showSource(''+" +
                        "document.getElementsByTagName('html')[0].innerHTML+'');");
                super.onPageFinished(view, url);
            }
        };
        mWebView.setWebViewClient(client);
    }

// Android的本地方法
@JavascriptInterface 
    public void showSource(final String source) {
        Log.e("webview", "被js回调的结果数据: " + source);
       //利用一些html数据解析库如jsoup解析出想要的数据
}

相关文章

网友评论

      本文标题:WebView技巧与问题收集

      本文链接:https://www.haomeiwen.com/subject/geiyihtx.html