5

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

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


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

但是,如果执行是通过setTimeout( gotoMainPage, 100 );或通过XMLHttpRequest回调完成的,shouldOverrideUrlLoading(..)则永远不会调用,而是将请求的页面加载到网络视图。

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

任何人?

4

2 回答 2

6

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

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

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

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

这对我有用。

于 2011-10-22T03:01:22.057 回答
3

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

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

}

和/或

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

}

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

于 2011-05-27T10:22:07.397 回答