在Android WebView中禁用链接

时间:2011-09-14 12:15:12

标签: javascript android dom webview hyperlink

首先,我在编程领域是相当绿色的,所以请原谅我,如果我的问题在任何部分都缺乏清除。 我目前正在尝试创建一个应用程序,要求链接无法在WebView中执行 - 或者为此而在另一个浏览器中执行。我已设法将以下两个链接In Android Webview, am I able to modify a webpage's DOM?Titanium Appcelerator Quickie: Disable links in Webview放在一起,并创建以下工作代码:

private class WebClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) 
    {       
        view.loadUrl("javascript:document.body.innerHTML = document.body.innerHTML.replace(/<a.*href=/gi,'<a href=\"#\" _url=');");       
    }
}

上面的代码片段放在onCreate-method之前,并在onCreate-method中引用,如下所示:

    viewer = (WebView) findViewById(R.id.wv_engine);
    viewer.setWebViewClient(new WebViewClient());
    viewer.loadUrl(content);

现在,代码可以工作......但只有在第二次加载请求的网页之后。我第一次执行WebView时,example.com的所有链接都是完整,可点击和可执行的。使用后退按钮,退出WebView并再次输入它会通过更改

来禁用所有链接
<a href="http://www.example.com">link</a>

<a href="#" _url="http://www.example.com">link</a>

现在,我是一个我不确定的理论(我不是程序员)。我相信JavaScript的执行速度会变慢,导致链接操作永远不会发生。这就是为什么它第二次使用缓存工作的原因。我从阅读this discussion那里得到了这些想法。但是我不知道如何纠正它。

所以我的问题是:如何确保所显示网站的所有链接都不能被使用?有没有办法在网站显示之前进行操作?

感谢您的时间和精力。这真是一个了不起的社区;)

  • Krede

1 个答案:

答案 0 :(得分:2)

我认为这是错误的:

viewer.setWebViewClient(new WebViewClient());

我想你的意思是:

viewer.setWebViewClient(new WebClient());

这解释了为什么在第一次加载时不禁用网址。但我不明白为什么他们第二次被禁用。

此外,我认为你应该删除它:

view.loadUrl(url);