Android WebView兼容性问题
2016-04-01 18:50
579 查看
Android WebView兼容性问题
问题表现WebView中,自定义打开URL页面的操作,有些页面需要通过二级页面打开。通过shouldOverrideUrlLoading进行定义的:
mWebView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
但是android 2.3.x(Android3.0以下)系列的机器 有个bug:自定义的webview截获不了,即shouldOverrideUrlLoading没有被调用。
解决方法
对Android版本进行适配。对于android 3.0以下版本,进行兼容性处理。对于android3.0以下版本放在shouldOverrideUrlLoading中的逻辑放在onPageStarted方法中去处理。
举例说明
加载网页规则:
1)当前页面默认的URL地址 /]http://[myhost]/
2)同级页面跳转 以]http://[myhost]开头,并且带有level=1参数的URL,在同一页面打开;
3)除此外,作为二级页面在新窗口或者作为OpenUrl处理。
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(final WebView view, final String url) { if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { //API < 11 shouldOverrideUrlLoading并不是每次都会调用 } else { //API >= 11 shouldOverrideUrlLoading有效 handler.post(new Runnable() { @Override public void run() { //2)JS连续调用出现问题采用线程队列处理 if (url.startsWith(Constants.PROTOCAL_HTTP) && url.contains(Constants.MAIN_HOST) && url.contains("level=1")) { //网页加载兼容http和https view.loadUrl(url); } else { //3)作为二级页面在新窗口或者作为OpenUrl处理 UriUtils.parseUri(MainFragment.this.getActivity(), url, handler); } } }); } return true; } @Override public void onPageStarted(final WebView view, final String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { //API < 11 shouldOverrideUrlLoading并不是每次都会调用 处理移动到onPageStarted handler.post(new Runnable() { @Override public void run() { if( url.equals(Constants.API_URL_MAIN) || url.equals(Constants.API_HTTP_URL_MAIN)) { //1)如果是默认URL继续加载 } else if (url.startsWith(Constants.PROTOCAL_HTTP) && url.contains(Constants.MAIN_HOST) && url.contains("level=1")) { //2)同级页面跳转(网页加载兼容http和https) } else { //3)作为二级页面在新窗口或者作为OpenUrl处理 //停止加载新的网页URL view.stopLoading(); //JS连续调用出现问题采用线程队列处理 UriUtils.parseUri(MainFragment.this.getActivity(), url, handler); } } }); } else { //API >= 11 shouldOverrideUrlLoading有效不需要URL处理 } } ......
}
从上可见,在onPageStarted方法中去处理页面跳转逻辑稍微有些差异。
相关文章推荐
- Android MTK 锁屏图片和背景墙纸的修改
- Android内存性能优化(内部资料总结)
- android studio 的一个坑
- 新建Android studio项目后出现Error:Could not determine Java version using executable
- 阅读《Android 从入门到精通》(34)——Intent Filter
- Android OPenCV 环境配置 <1>
- android 无线模式下使用ADB调试
- android中广告轮播图总结
- 微信图片链接失效的替换脚本
- WebGL 3D on iOS8 正式版
- scrollview 与 webview的嵌套使用(加载h5页面)
- Swift中的指针类型
- Android Studio配置文件路径修改
- WKWebView与Js实战(OC版)
- Android APP终极瘦身指南
- WKWebView API精讲(OC)
- 最简单的js调用android 方法
- Android的消息处理机制
- iOS基础动画
- Android之标题状态栏的隐藏