android shouldOverrideUrlLoading 部分手机不执行解决方案!亲测有效

首先说一下本人遇到的事,我需要在android的WebView 里面打开html网页,网页里面是有链接的,当用户长按链接的时候我需要拦截链接 并阻止打开,然后根据拦截下来的链接里面有我需要的文字在app里面打开相应的操作界面。

PS:我遇到的WebView shouldOverrideUrlLoading不执行 原因是因为我在js里面设置了计时器实现可以判断用户长按的功能(功能js贴在我博客里,需要的可以去复制粘贴即可使用),当android遇到html 的 js代码里面执行有计时器如:setTimeout就不会执行android WebView 里面的 shouldOverrideUrlLoading 。

好了,原因弄出来那么接下来就是如何彻底解决一劳永逸,本人尝试百度无数方法,什么onPageCommitVisible(包括onPage….任何方法),然而都没什么卵用,最终用了一个剑走偏方的方法。

解决思路:利用android WebView WebChromeClient 方法,该方法里面的onReceivedTitle每次HTML head title有变化都会执行。(当然可以是其他的,我只是拿title来举例)

下面是Html的title:

<head>
    <title>这里每次变化都会执行上面的android  WebView WebChromeClient onReceivedTitle方法</title>
</head>

这样的话我直接把以前在WebView shouldOverrideUrlLoading里面拦截的链接写在title里面然后获取不就好了吗?想想就兴奋!

首先我把HTML 里面打开链接的方式改成用JS修改title,JS代码如下面所示:

    <script>
        function URL_GO(url){
            timeOutEvent = 0;
            //window.location.href=url; 之前是这句直接打开链接
            document.title =url; //现在改成去修改html head里面的title 然后由android里面去获取这个title 
        }
    </script>

下面是android获取HTML head里面的title的使用示例:

webview.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            //title就是我们想要的链接,如果需要在本页面打开这个链接的话直接写下面那句
            webview.loadUrl(title);
            //如果需要做别的事,比如我需要title弹出提醒框直接写下面那句
            Toast.makeText(this, title, Toast.LENGTH_SHORT).show();
        }
    };
 );

如果这样还看不懂就请私聊我

猜你喜欢

转载自blog.csdn.net/Misters_Chen/article/details/81749049