1、Android调用JS
1.1 通过webview的loadUrl方法
1.2 通过webview的evaluateJavaScript方法 此方法在Android 4.4及以上才支持,向下兼容性较差
2、JS调用Android
2.1 通过webview的addJavaScriptInterface()方法进行对象映射
2.2 通过webviewClient的shouldOverrideUrlLoading()方法回调拦截URL
2.3 通过webChromeClient的onJsAlert()、onJsConfirm()、onJsPrompt()方法回调拦截JS的对话框的alert等消息
3、webView遇到的坑
3.1 为什么webview打开一个页面,播放一段音乐,退出activity时音乐还在继续播放?
解决办法1:销毁webview,在ondestory方法中处理:
//销毁Webview
@Override
protected void onDestroy() {
if (mWebview != null) {
mWebview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
mWebview.clearHistory();
((ViewGroup) mWebview.getParent()).removeView(mWebview);
mWebview.destroy();
mWebview = null;
}
super.onDestroy();
}
还有别问我为什么要移除,等你Error: WebView.destroy() called while still attached!之后你就知道了。
解决办法2:
@Override
protected void onPause() {
h5_webview.onPause();
h5_webview.pauseTimers();
super.onPause();
}
@Override
protected void onResume() {
h5_webview.onResume();
h5_webview.resumeTimers();
super.onResume();
}
3.2 怎么用webview的标题栏来设置自己的标题栏
解决办法:
WebChromeClient mWebChromeClient = new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
txtTitle.setText(title);
}
};
mWedView.setWebChromeClient(mWebChromeClient());
★★ 注意事项:
● 1.可能当前页面没有标题,获取到的是null,那么你可以在跳转到该Activity的时候自己带一个标题,或者有一个默认标题。
● 2.在一些机型上面,Webview.goBack()后,这个方法不一定会调用,所以标题还是之前页面的标题。那么
你就需要用一个ArrayList来保持加载过的url,一个HashMap保存url及对应的title.然后就是用WebView.canGoBack()来做判断处理了。
4、webview内存泄漏
1、不在xml文件中创建webview,而是在activity中需要的时候new一个出来,并且webview的context使用getApplicationContext()
2、在activity销毁的时候,先让webview加载null内容,然后移除webview,再销毁webview,最后将webview置为null
参考链接 https://www.jianshu.com/p/b9164500d3fb