我正在开发一个混合应用程序,并尝试根据在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;
}
所以我遇到的问题是,在onOverrideUrlLoading完成将isExternalDomain设置为false的所有行之后,将执行javascript。我想让onOverrideUrlLoading根据javascript返回的值返回true或false。
最佳答案
不幸的是,无法从onOverrideUrlLoading()
内部运行JavaScript代码。您必须从onOverrideUrlLoading()
返回,然后WebView才能执行其他任何操作。当您从WebView.loadUrl()
内部调用onOverrideUrlLoading()
时,实际上发生的是将异步任务发布到WebView的消息循环中。仅在离开onOverrideUrlLoading()
后才进行处理。因此,当代码在onOverrideUrlLoading()
内部时,WebView不会处理任何延迟。
如果要防止基于JavaScript代码的决定进行导航,则使用window.onbeforeunload
事件处理程序在JavaScript端执行此操作更为自然。如果从中返回非null
值,则通过单击链接进行导航的尝试将被取消。
以下是JavaScript代码示例:
window.onbeforeunload = function() {
if (navigationDisallowed()) {
return true; // Prevent navigating away from the page.
} else {
return null; // Allow navigating away.
}
}
关于android - 基于JavaScript返回值的Android onOverrideUrlLoading,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31144038/