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

时间:2011-03-08 06:00:08

标签: android webview webviewclient

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

function gotoMainPage( ) {
    window.location.href = "main/main.do";
}


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

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

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

任何?

2 个答案:

答案 0 :(得分:6)

就我而言,在我的网页中使用window.location =“http:// xxx”时,事件shouldOverrideUrlLoading()不会被触发。

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

if (url.startsWith("androidurl://")) {
    url = url.replaceAll("androidurl://", "http://");
}

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

这适合我。

答案 1 :(得分:3)

我已经看到这个也出现了,imho,这显然是一个错误。 也许你可以坚持:

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

}

和/或

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

}

我自己试了一下,发现onLoadResource会被触发,即使shouldOverride不是。