在我的应用程序中,我从Web服务中提取一些HTML并将其显示在WebView中。大多数情况下,应用程序会在HTML中显示链接,因为它们可以单击并打开Android浏览器。但是,其他时候,链接不可点击。事实证明,服务有时会为HTML提供不在href中的链接,而且只是纯文本。
WebView有没有解析HTML并使这些链接“可点击”?我知道默认的Android浏览器可以做到,但我不确定WebViews。
答案 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注入中找到更多信息。