在我的應用程序中,我從Web服務中拉取一些HTML並在WebView中顯示它。大多數情況下,應用程序會在HTML中顯示鏈接,因爲它們可以點擊並打開Android瀏覽器。但是,其他時候,鏈接不可點擊。事實證明,該服務有時會提供帶有不在href內的鏈接的HTML,並且只是純文本。WebView中的非可點擊鏈接
反正是有一個的WebView解析HTML,使這些鏈接「點擊」?我知道默認的Android瀏覽器可以做到這一點,但我不確定WebViews。
在我的應用程序中,我從Web服務中拉取一些HTML並在WebView中顯示它。大多數情況下,應用程序會在HTML中顯示鏈接,因爲它們可以點擊並打開Android瀏覽器。但是,其他時候,鏈接不可點擊。事實證明,該服務有時會提供帶有不在href內的鏈接的HTML,並且只是純文本。WebView中的非可點擊鏈接
反正是有一個的WebView解析HTML,使這些鏈接「點擊」?我知道默認的Android瀏覽器可以做到這一點,但我不確定WebViews。
web視圖可能沒有內置的探測器到頁面內自動鏈接純網址時,但你可以在網頁視圖中運行的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借用網址解析JavaScript的正則表達式來自「How to replace plain URLs with links?」,更多的信息可以在Android WebViewClient的參考文獻和http://lexandera.com/2009/01/injecting-javascript-into-a-webview/(不是我)上的JavaScript注入中找到。
,我不得不刪除一些逃避斜線,使Eclipse的快樂,它看起來像Webview是加載功能,但它沒有任何更換。 – SeanPONeil
你有可能發佈你的最終代碼嗎?很可能是一個簡單的JavaScript錯誤。 –
我結束了這個路線http://stackoverflow.com/questions/8317364/string-replaceall-method-not-working正則表達式略有不同 – SeanPONeil