Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript阻止Android WebView导航_Javascript_Android_Android Webview - Fatal编程技术网

使用javascript阻止Android WebView导航

使用javascript阻止Android WebView导航,javascript,android,android-webview,Javascript,Android,Android Webview,我想在页面加载后将一些Javascript注入到WebView中,以防止用户离开该页面 此页面上有使用Javascript导航用户的链接,因此WebViewClient::shouldOverrideUrlLoading是不够的。它甚至不会被解雇 private final String javascript = "javascript:window.onbeforeunload = function(){ return false; };" public void onPageFinishe

我想在页面加载后将一些Javascript注入到WebView中,以防止用户离开该页面

此页面上有使用Javascript导航用户的链接,因此
WebViewClient::shouldOverrideUrlLoading
是不够的。它甚至不会被解雇

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

public void onPageFinished(WebView view, String url) {
        getWebView().loadUrl(javascript);
}
我希望上面的代码可以工作,但它没有。点击不同的元素仍然允许用户从起始url导航


有办法做到这一点吗?

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);
}
var-Anchors=document.getElementsByTagName(“a”);
对于(var i=0;i

如果链接不是锚定的,这将不起作用,但如果您试图围绕由其他人设计的用户界面编写代码,而您无法访问这些内容,则会发生这种情况

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);
}
var-Anchors=document.getElementsByTagName(“a”);
对于(var i=0;i

如果链接不是锚定链接,这将不起作用,但如果您试图围绕其他人设计的UI编写代码,而您无权访问这些内容,则可以通过设置自定义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;
        }
    });

可以通过设置自定义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;
        }
    });

所以我觉得这对我来说不太合适。我在最初的帖子中没有具体说明的一点是,我正试图捕捉点击导航链接的用户,并使用该url启动Android浏览器应用程序。我已经成功地做到了这一点。但是,当用户点击“上一步”按钮并返回到我的应用程序时,WebView也向前移动了。我曾尝试在WebView上以编程方式调用
goBack()
,效果很好。但是,用户会看到页面来回切换,这不是一个很好的体验。所以我认为这对我来说不太合适。我在最初的帖子中没有具体说明的一点是,我正试图捕捉点击导航链接的用户,并使用该url启动Android浏览器应用程序。我已经成功地做到了这一点。但是,当用户点击“上一步”按钮并返回到我的应用程序时,WebView也向前移动了。我曾尝试在WebView上以编程方式调用
goBack()
,效果很好。然而,用户会看到页面来回切换,这不是一个很好的体验。