首先,我在编程世界中还比较新手,如果我的问题有任何不清晰的地方,请谅解。 我目前正在尝试制作一个应用程序,需要在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方法之前,并且在onCreate方法中像这样引用:
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>
to
<a href="#" _url="http://www.example.com">link</a>
现在,我有一个理论,但我并不确定(我不是程序员)。我认为JavaScript执行速度太慢,导致链接操作从未发生。这就是为什么它第二次与缓存一起工作而不是第一次的原因。我从阅读这个讨论中得出了这些想法。但我不知道如何纠正它。
所以我的问题是:我怎样才能确保显示的网站上的任何链接都无法使用?是否有一种方法可以在网站显示之前进行操作?
感谢您的时间和努力。这真是一个令人惊叹的社区 ;)
- Krede
shouldOverrideUrlLoading
中删除view.loadUrl(url);
,这应该会在嵌入式浏览器中显示您已处理该链接,但您什么也没做,没有导航,没有loadUrl
。 - Salw