2015-09-24 35 views
0

我在web視圖中顯示內容。內容從服務器API加載。內容可以包含以下鏈接:Android Webview:如何捕捉點擊給定的本地URL

<a href="#register">Register</a> 

我如何能趕上點擊#register

我可以用一些HTML解析器和追加onClick事件來做到這一點,但更好也更容易將URL更改爲#register

非常感謝您的任何建議。

編輯:

我嘗試下面的例子,但沒有運氣

browser = (WebView) view.findViewById(R.id.intro_browser); 
     // Set Chrome instead of the standard WebView 
     browser.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url){ 
       Logger.d("TEST"); 
       return true; 
      } 

      @Override 
      public void onLoadResource(WebView view, String url) { 
       Logger.d("URL IS:"); 
       Logger.d(url); 

       if (url.startsWith("app://")) { 

       } 
      } 
     }); 
     browser.getSettings().setJavaScriptEnabled(true); 
     browser.addJavascriptInterface(new WebViewJavaScriptInterface(getContext()), 
       Constants.Welcome.JAVASCRIPT_NAMESPACE); 
     //browser.getSettings().setAllowFileAccessFromFileURLs(true); 
     //browser.getSettings().setAllowUniversalAccessFromFileURLs(true); 
     browser.loadData(htmlContent, Constants.Welcome.MIME_TYPE, Constants.Welcome.ENCODING); 

回答

0

您需要創建自定義WebViewClient:

public class CustomWebViewClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     boolean result = false; 
     if (Objects.equal(url, "#register")) { 
      result = true; 
      //Do what you want here 
     } 
     return result; 
    } 
} 

,然後你需要給它WebView:

webView.setWebViewClient(new CustomWebViewClient()); 

返回true in shouldOverrideUrlLoading意味着您在處理URL時返回false意味着WebView應該處理它。

+0

謝謝,請參閱我的更新問題。 – redrom

+0

如果你這樣寫,並且總是從'shouldOverrideUrlLoading'返回'true',這個頁面永遠不會被加載。爲什麼你沒有完全按照我的回答做? – Karzmu

+0

另外爲什麼你使用'loadData'而不是'loadUrl'? – Karzmu

0

在清單中添加一個意圖過濾器,以便以「yourapp://」或類似名稱開頭的鏈接將啓動您的應用程序。

如果您要生成網頁內容,請爲您的應用程序生成鏈接。

<a href="yourapp://register">Register</a> 

如果您未生成內容,請使用webview.load(「javascript:// code將寄存器鏈接替換爲yourapp://」)。

相關問題