2016-04-07 85 views
0

我想在加載頁面後將一些JavaScript注入WebView,這會阻止用戶從該頁面導航。使用javascript防止Android WebView導航

本頁有鏈接用Javascript來瀏覽用戶,所以WebViewClient::shouldOverrideUrlLoading是不夠的。它甚至沒有被解僱。

private final String javascript = "javascript:window.onbeforeunload = function(){ return false; };" 

public void onPageFinished(WebView view, String url) { 
     getWebView().loadUrl(javascript); 
} 

我希望上面的代碼可以工作,但事實並非如此。點擊不同的元素仍然允許用戶遠離起始網址。

有沒有辦法做到這一點?

回答

0

android webview遵循與所有其他瀏覽器相同的規則,這意味着onbeforeunload將不會以這種方式工作。您必須配合防止按元素導航的事件。

假設你的鏈接實際上a標籤,你可以做這樣的事情在頁面加載

var Anchors = document.getElementsByTagName("a"); 

for (var i = 0; i < Anchors.length ; i++) { 
    Anchors[i].addEventListener("click", 
     function (event) { 
      event.preventDefault(); 
     }, 
     false); 
} 

如果鏈接不錨這不會工作,但如果你想代碼周圍由設計了UI別人說你沒有訪問這個事情發生

+0

所以我認爲這不會完全奏效我。我在原始文章中沒有指定的是我試圖捕獲用戶點擊導航鏈接並使用該網址啓動Android瀏覽器應用程序。我已經成功完成了這個。但是,當用戶點擊後退按鈕並返回到我的應用程序時,WebView也向前移動。 – Andrew

+0

我試圖通過編程調用WebView上的'goBack()',並且工作正常。但是,用戶會看到頁面來回切換,這不是一個很好的體驗。 – Andrew

0

有可能通過設置自定義的WebView客戶端:

webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      // put your code here 
      return true; //Indicates WebView do NOT load the url; 
     } 
    });