禁用 Android WebView 中的链接

kre*_*e85 5 javascript android dom hyperlink webview

首先,我对编程领域还很陌生,所以如果我的问题在任何部分缺乏明确性,请原谅我。我目前正在尝试制作一个需要链接的应用程序,该应用程序无法在 WebView 中执行,或者因此无法在其他浏览器中执行。我已经设法放置以下两个链接,在Android Webview中,我可以修改网页的DOM吗?Titanium Appcelerator Quickie:禁用 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=');");       
    }
}
Run Code Online (Sandbox Code Playgroud)

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

    viewer = (WebView) findViewById(R.id.wv_engine);
    viewer.setWebViewClient(new WebViewClient());
    viewer.loadUrl(content);
Run Code Online (Sandbox Code Playgroud)

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

<a href="http://www.example.com">link</a>
Run Code Online (Sandbox Code Playgroud)

<a href="#" _url="http://www.example.com">link</a>
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 克雷德

Can*_*ner 3

我认为这是错误的:

viewer.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)

我猜你的意思是这样的:

viewer.setWebViewClient(new WebClient());
Run Code Online (Sandbox Code Playgroud)

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

另外,我认为你应该删除这个:

view.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)