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解析出想要的数据
}
网友评论