Android WebView踩过的坑

坑1:点击网页中的按钮无响应

场景:两个H5页面,H1,H2,H2里面有一个按钮与JS交互,第一种情况:先进入H1页面,返回后在进入H2页面,点击按钮无响应,第二种情况:先进如H2页面,点击按钮正常,返回进入H1,在重新进入H2,点击无反应。

针对这种情况,发现导致以上这两种情况的原因是WebView属性设置错误导致的。

webView.onResume(),//激活webview为活跃状态,能正常执行网页的响应

webView.onPause(),//当页面被失去焦点被切换到后台不可见时,需要执行onPause(),通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JS的执行

webView.onpauseTimers(),//当应用程序(存在webview)被切换到后台时,这个方法不仅仅针对当前页面内的webview而是整个应用程序中所有页面的webview,它会暂停所有webview的layout,parsing,javascripttimer。降低CPU功耗

webView.resumeTimers(),//恢复pauseTimers状态

看了这几个属性的注释,恍然大悟,赶紧检查代码,果真如此,在H1页面的onPause()方法中设置了webView.onpauseTimers(),导致只要进入H1在返回就会调用这个属性,导致全局的WebView都无法响应。

坑2:WebView加载网页不显示图片

webView加载https的网页时,如果网页中的图片引用是http,Android5.0以上的手机webView默认不允许混合模式,https当中不能加载http资源,所以需要手动设置开启。
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
      webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

坑3:WebView加载网页中无法播放视频

在webView所在Activity的AndroidManifest.xml中添加属性android:hardwareAccelerated="true"


坑4:WebView打开多个H5页面,返回键无效

设置WebView的webViewClient时,重写此方法
mWebView.setWebViewClient(new InnerWebViewClient());
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
     return false;
}



猜你喜欢

转载自blog.csdn.net/l707941510/article/details/80521933