2016-04-07 2 views
0

Ich möchte etwas Javascript in ein WebView injizieren, nachdem eine Seite geladen wird, die den Benutzer daran hindern, von dieser Seite weg zu navigieren.Verhindern von Android WebView Navigation mit Javascript

Es gibt Links auf dieser Seite, die Javascript verwenden, um den Benutzer zu navigieren, so WebViewClient::shouldOverrideUrlLoading ist nicht ausreichend. Es wird nicht einmal gefeuert.

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

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

Ich hatte gehofft der obige Code würde funktionieren, aber es nicht. Durch das Tippen auf verschiedene Elemente kann der Benutzer weiterhin von der Start-URL weg navigieren.

Gibt es eine Möglichkeit, dies zu tun?

Antwort

0

Das Android-Webview folgt den gleichen Regeln wie alle anderen Browser, was bedeutet, dass onbeforeunload nicht so funktioniert. Sie müssen ein Ereignis verknüpfen, das die Navigation auf Elementbasis verhindert.

Ihre Links Unter der Annahme, sind in der Tat a Tags, die Sie so etwas wie dies auf Seite Last

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

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

tun können, wenn die Links nicht Anker dies nicht funktionieren, aber wenn Sie um ein UI-Code versuchen, entworfen von jemand anderes, dass Sie auf diese Sachen haben Zugriff nicht geschieht

+0

Also ich denke, das wird nicht ganz Arbeit für mich. Etwas, das ich in meinem ursprünglichen Post nicht angegeben habe, ist, dass ich versuche, den Benutzer, der auf Navigationslinks tippt, einzufangen und die Android Browser App mit dieser URL zu starten. Ich habe das erfolgreich gemacht. Wenn der Benutzer jedoch die Zurück-Schaltfläche drückt und zu meiner Anwendung zurückkehrt, hat sich das WebView ebenfalls vorwärts bewegt. – Andrew

+0

Ich habe programmgesteuert versucht, 'goBack()' auf dem WebView aufzurufen, und das funktioniert. Der Benutzer sieht jedoch, dass die Seite hin und her wechselt, und es ist keine großartige Erfahrung. – Andrew

0

Es ist möglich, indem Sie eine benutzerdefinierte webview Client Einstellung:

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; 
     } 
    });