Android onOverrideUrlLoading 基于javascript返回值

标签 android cordova webview android-webview cordova-plugins

我正在开发一个混合应用程序,并尝试根据在 webview 中执行的 javascript 函数的返回值在 webview 的 onOverrideUrlLoading 中返回 true 或 false

我目前的示例代码。

//Have a boolean variable isExternalDomain; 
//Added JavascriptInterface webView.addJavascriptInterface(this, "android");

public boolean onOverrideUrlLoading(final String url) {


WebView.loadUrl("javascript:android.onData('true')");

//I Tried inserting sleep, delay EG: Thread.sleep(200); 


//I see the delay but still javascript executes last.

if(isExternalDomain) {
 return true;
 } else {
 return false;
 }

}

@JavascriptInterface public void onData(String value)
 {   
 isExternalDomain = true; 
}

所以我遇到的问题是 javascript 执行发生在 onOverrideUrlLoading 完成执行所有 isExternalDomain 为 false 的行之后。我想让 onOverrideUrlLoading 根据 javascript 返回值返回 true 或 false。

最佳答案

不幸的是,无法从 onOverrideUrlLoading() 内部运行 JavaScript 代码。在 WebView 可以执行任何其他操作之前,您必须从 onOverrideUrlLoading() 返回。当您从 onOverrideUrlLoading() 内部调用 WebView.loadUrl() 时,真正发生的是一个异步任务被发布到 WebView 的消息循环中。它只会在您离开 onOverrideUrlLoading() 后得到处理。因此,当您的代码在 onOverrideUrlLoading() 中时,WebView 不会有任何延迟来处理您的请求。

如果您想根据 JavaScript 代码做出的决定阻止导航发生,则更自然的做法是在 JavaScript 端使用 window.onbeforeunload 事件处理程序。如果您从中返回非 null 值,将取消通过单击链接导航离开的尝试。

下面是一段 JavaScript 代码示例:

window.onbeforeunload = function() {
    if (navigationDisallowed()) {
        return true;  // Prevent navigating away from the page.
    } else {
        return null;  // Allow navigating away.
    }
}

关于Android onOverrideUrlLoading 基于javascript返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31144038/

相关文章:

html - Android webview单选按钮和复选框样式

android - 如何建立一个类似于默认短信线程 View 的 View ?

android - Fragment 的菜单项被多次添加

android - 如何使 map 在标记上居中单击以显示整个 InfoWindow

ios - 创建可录制和播放本地视频的 iPad 应用程序的最佳技术是什么?

javascript - 可以使用 javascript/jquery/AngularJS 或其他方式操作 Chrome 应用程序 "webview"dom

android - ondraw 方法不起作用

iphone - 电话间隙 iPhone : exit application code if no Internet connection found

javascript - cordova/phonegap 阻止并允许后退按钮

android - 如何判断一个WebView是否一直缩小