我有一个javascript函数'gotoMainPage()'
function gotoMainPage( ) {
window.location.href = "main/main.do";
}
现在,如果由于“直接用户交互”而执行shouldOverrideUrlLoading(..)
,则会调用WebViewClient的gotoMainPage( )
,例如用户点击此div:
<div.... onclick='gotoMainPage();'/>
但是,如果通过setTimeout( gotoMainPage, 100 );
或XMLHttpRequest
回调执行,则永远不会调用shouldOverrideUrlLoading(..)
,但会将请求的页面加载到webview中。
我错过了一个明显的解释,还是这个错误?
任何?
答案 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不是。