如果在超时回调中修改"window.location.href",则不执行shouldOverrideUrlLoading(...)

Dr.*_*ins 5 android webview webviewclient

我有一个javascript函数'gotoMainPage()'

function gotoMainPage( ) {
    window.location.href = "main/main.do";
}
Run Code Online (Sandbox Code Playgroud)


现在,shouldOverrideUrlLoading(..)如果gotoMainPage( )由于"直接用户交互"而执行,则会调用WebViewClient ,例如用户单击此div:
<div.... onclick='gotoMainPage();'/>

但是,如果通过setTimeout( gotoMainPage, 100 );或通过XMLHttpRequest回调执行,shouldOverrideUrlLoading(..)则永远不会调用,但请求的页面会被加载到webview.

我错过了一个明显的解释还是这个错误?

任何人?

小智 6

在我的例子中,当在我的网页中使用window.location ="http:// xxx"时,事件shouldOverrideUrlLoading()不会被触发.

但是,如果我使用自定义URL方案或协议(如"androidurl://"),则会触发shouldOverrideUrlLoading().我的解决方法是使用自定义协议并在shouldOverrideUrlLoading()方法中添加以下代码:

if (url.startsWith("androidurl://")) {
    url = url.replaceAll("androidurl://", "http://");
}
Run Code Online (Sandbox Code Playgroud)

这会将自定义协议更改回"http://"协议,您可以从那里处理正确的URL.

这适合我.


Ske*_*ela 3

我自己也看到过这种情况,恕我直言,这显然是一个错误。也许你可以抓住:

@Override
public void onLoadResource (WebView view, String url)
{

}
Run Code Online (Sandbox Code Playgroud)

和/或

@Override
public void onPageFinished(WebView webView, String url) 
{

}
Run Code Online (Sandbox Code Playgroud)

我自己尝试过,发现 onLoadResource 会被触发,即使 shouldOverride 没有被触发。