【问题标题】:shouldOverrideUrlLoading(...) not executed if "window.location.href" modified in a timeout callback如果在超时回调中修改了“window.location.href”,则 shouldOverrideUrlLoading(...) 不会执行
【发布时间】:2011-07-10 21:05:30
【问题描述】:

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

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


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

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

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

有人吗?

【问题讨论】:

    标签: android webview webviewclient


    【解决方案1】:

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

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

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

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

    这对我有用。

    【讨论】:

    • 干得好。在过去的 4 天里,我遇到了同样的问题。你救了我。非常感谢。
    【解决方案2】:

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

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

    和/或

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

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

    【讨论】:

    • 我也可以确认,这两种方法都会被触发,即使 shouldOverrideUrlLoading 不是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多