Android 解决WebView重定向
发布时间
阅读量:
阅读量
使用webView打开的window对象,并通过其实现的back()、forward()方法。在某些情况下打开的实际页面与预期不同,可能需要多次点击返回按钮才能回到初始页面。访问路径正确的情况下却出现了错误。这些异常现象通常与网页自身重定向有关。以携程网站为例... 对于已经开启过的页面进行打印操作
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.e("kid","onPageStarted="+url);
}
});

可以看到,在onPageStarted的过程中不仅仅执行了一次任务。具体来说,在返回操作(goBack)时,必须多次调用该函数才能完成返回操作。此外,我们还发现了一些奇怪的东西(ctrip://开头),这些实际上是携程官方定义的协议。这些协议与我们公司开发的H5页面业务逻辑是相同的(特别是针对Android平台)。然而,在将一段代码复制并粘贴到iOS设备上的时候(即iOS浏览器),会触发一个系统提示框询问是否跳转到携程App。因此,在开发过程中我们忽略了这一点。为了避免网站重定向对正常浏览的影响(例如偶尔出现错误页面),我们需要采取相应的措施。
解决方法如下:WebView具备拦截网络请求的能力,并且可以在onPageStart之前设置该函数(shouldOverrideUrlLoading)返回true以实现拦截功能。在前进和返回逻辑中将业务逻辑交由WebView处理以使其自动处理相关请求。但是需要阻止其处理部分特定协议(如携程自定义协议),因为如果不做此限制的话,在启动加载过程后可能会进入错误页面。
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(!(url.startsWith("http")||url.startsWith("https"))){
return true;
}
return false;
}
});
全部评论 (0)
还没有任何评论哟~
