WebView中的不可点击链接

时间:2011-11-29 02:24:03

标签: android android-webview

在我的应用程序中,我从Web服务中提取一些HTML并将其显示在WebView中。大多数情况下,应用程序会在HTML中显示链接,因为它们可以单击并打开Android浏览器。但是,其他时候,链接不可点击。事实证明,服务有时会为HTML提供不在href中的链接,而且只是纯文本。

WebView有没有解析HTML并使这些链接“可点击”?我知道默认的Android浏览器可以做到,但我不确定WebViews。

1 个答案:

答案 0 :(得分:1)

Webview可能没有内置检测器来自动链接页面中的纯URL,但您可以在WebView中运行JavaScript函数,以在页面加载完成后解析URL。

基本上,如下所示(我还没有检查此代码的语法,但它应该给你的想法):

final WebView webview = (WebView)findViewById(R.id.browser);
/* JavaScript must be enabled if you want it to work, obviously */
webview.getSettings().setJavaScriptEnabled(true);

/* WebViewClient must be set BEFORE calling loadUrl! */
webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url)
    {
        webview.loadUrl("javascript:(function() { " +
                "var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; " +
                "document.getElementsByTagName('body')[0].innerHTML =  document.getElementsByTagName('body')[0].innerHTML.replace(exp,'<a href='$1'>$1</a>');" +
                "})()");
    }
});

webview.loadUrl("http://code.google.com/android");

请注意,上面的JavaScript借用了来自“How to replace plain URLs with links?”的URL解析JavaScript正则表达式,并且可以在Android WebViewClient引用和http://lexandera.com/2009/01/injecting-javascript-into-a-webview/(不是我)中的JavaScript注入中找到更多信息。