webveiw返回死循环问题以及在打开web页面会唤起浏览器打开的问题解决

时间:2023-03-10 06:26:47
webveiw返回死循环问题以及在打开web页面会唤起浏览器打开的问题解决

微信、QQ空间等大量软件都内嵌了H5,不得不说这是一种趋势,Andriod与H5互调可以让我们实现混合开发。至于混合开发就是在一个App中内嵌一个轻量级的浏览器,一部分原生的功能改为Html 5来开发。

优势:使用H5实现的功能能够在不升级App的情况下动态更新,而且可以在Android或iOS的App上同时运行,节约了成本,提高了开发效率。 
原理:其实就是Java代码和JavaScript之间的调用。

要实现Android与H5互调,WebView是一个很重要的控件,WebView可以很好地帮助我们展示html页面。

项目中需要用webView加载第三方的web页面,其中有个页面有重定向到另外一个页面,造成了页面无法后退,后退到上个页面,又重定向到之前界面,重定向源页面也被加入到浏览记录中,刚开始想查找api中找个编辑历史记录的方法,把找重定向源页面从历史记录中删除,半天找不到,只有clearHistory方法。

后用浏览器访问该网站,则后退正常,会退到重定向页面。用微信内置WebView ,QQ内置WebView打开该页面后退也正常,发现重定向源页面也被加入到浏览记录中。

大部分都是新建集合另外记录下浏览记录,后退时加载集合里的记录的页面。而不使用Webview.goBack(),在*上找也大都是这些。感觉这些方法不完美,没有从根本上解决问题。总感觉还有更好的方法,一个偶然情况下发现了解决方案。

在使用WebView的时候,我们一般都会设置WebViewClient ,重写shouldOverrideUrlLoading方法,让webView加载点击url,并return true。因为不这样设置,点击页面上的链接弹出浏览器

webView.setWebViewClient(new WebViewClient() {  

    @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
} });

  而造成重定向源页面被加入历史记录貌似恰恰是这个设置。而让人想不到的解决方案竟是下面这段代码

webView.setWebViewClient(new WebViewClient() {  

        @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { return false;
} });

之前我以为这样设置跟没设置WebViewClient效果一样,也会点击链接弹浏览器。没想到竟是完全不一样的,这样设置点连接会在当前webView打开,而且重定向页面后退也没问题

使用webview显示html代码 webView.loadDataWithBaseURL(null,"<html><head><title> 欢迎您 </title></head>" + "<body><h2>使用webview显示 html代码</h2></body></html>", "text/html" , "utf-8", null);