坑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; }