2011-11-29 109 views
1

在我的應用程序中,我從Web服務中拉取一些HTML並在WebView中顯示它。大多數情況下,應用程序會在HTML中顯示鏈接,因爲它們可以點擊並打開Android瀏覽器。但是,其他時候,鏈接不可點擊。事實證明,該服務有時會提供帶有不在href內的鏈接的HTML,並且只是純文本。WebView中的非可點擊鏈接

反正是有一個的WebView解析HTML,使這些鏈接「點擊」?我知道默認的Android瀏覽器可以做到這一點,但我不確定WebViews。

回答

1

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注入中找到。

+1

,我不得不刪除一些逃避斜線,使Eclipse的快樂,它看起來像Webview是加載功能,但它沒有任何更換。 – SeanPONeil

+0

你有可能發佈你的最終代碼嗎?很可能是一個簡單的JavaScript錯誤。 –

+0

我結束了這個路線http://stackoverflow.com/questions/8317364/string-replaceall-method-not-working正則表達式略有不同 – SeanPONeil