首先说一下本人遇到的事,我需要在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();
}
};
);
如果这样还看不懂就请私聊我