shouldOverrideUrlLoading 仅在某些网页上被调用

Posted

技术标签:

【中文标题】shouldOverrideUrlLoading 仅在某些网页上被调用【英文标题】:shouldOverrideUrlLoading gets called ONLY for SOME webpages 【发布时间】:2012-03-29 00:48:21 【问题描述】:

我将方法 shouldOverrideUrlLoading 用于针对多个客户端进行个性化的应用程序。每个客户端都有自己想要加载到 webview 中的网页。我的问题是:该应用程序非常适合客户端 A 和他的网页,但不适用于客户端 B 的网页(与客户端 A 没有任何关系)。正如我所测试的,不同之处在于,在客户端 B 的情况下,对于在加载到 webview 的内容中访问的链接,shouulOverrideUrlLoading 不起作用(永远不会被调用),而对于客户端的 A 网页则可以完美运行。另一件事是客户端的 B 网页不仅适用于某些 android 版本,如 2.1 或 2.3.6,但在 2.3.3、2.3.5、4.0.2 或 4.0.3 上运行良好。

所以这有点奇怪。如果你碰巧知道什么,请帮忙!谢谢!:)

编辑:我注意到当网页不通过 javascript 加载请求的链接时不会调用 shouldOverrideLoading 并且在不使用 javascript 时它可以工作!!!但是当我设置 webview.setJavaScriptEnabled(false) 时它起作用了!!!我真的需要为我的应用程序启用 javascript,因为网页通常使用 javascript 来处理除了加载之外的其他事情,所以我不能仅仅因为 shouldOverrideUrlLoading 没有被调用而禁用它!

编辑 2:更准确地说:

这个有效并且 shouldOverrideUrlLoading 被调用:

<p onclick="location.href='linkHere'">
        NewLink
        <span class="icon-arrow"></span>
</p>

这个不起作用,并且 shouldOverrideUrlLoading 不会被调用:

<a class="link-inherit" href="linkHere">
        NewLink
        <span class="icon-arrow"></span>
</a>

【问题讨论】:

也许可以帮助***.com/questions/6738328/… 是的..我看到了那个帖子。不完全是我的情况。无论如何谢谢:) 我遇到了同样的问题。您找到解决方法了吗? 问题似乎是js函数setTimeout(fn,millis)。您已经编写了一个覆盖它的 js 函数,然后在您的 Android 代码中重新创建此函数的行为(使用 JavascriptInterface),因为它最适合您的应用程序。很多工作取决于您的应用程序功能,但它确实有效。代码太长,无法在此处发布,而且我也不允许将其公开,但想法是覆盖 setTimeout,然后从 android 代码中调用一个方法,该方法使线程休眠,以了解在 js 中 setTimeout 的初始调用中有多少毫秒最后[待续...] 终于又写了一个js函数,从android中调用。第二个 js 函数将使用 call() 方法对最初保存在哈希中的函数进行初始调用。只有当初始调用的类型是“函数”时,才需要调用第二个 js 函数。如果不是你直接从android调用 eval(\"" + fn + "\"); 【参考方案1】:

未调用shouldOverrideUrlLoading 的解决方案

public void onPageStarted(WebView view, String url, Bitmap favicon) 

        if (url.contains("success")) 
            Intent intent = new Intent(WebviewActivity.this, OrderConfirmActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
         else 
            super.onPageStarted(view, url, favicon);
        
    

【讨论】:

???这对任何人都有效吗?我不明白如何...... Android是否附加了“成功”后缀或什么?我在我的 onPageStarted 中打印 url 参数,但情况并非如此,至少对我而言。

以上是关于shouldOverrideUrlLoading 仅在某些网页上被调用的主要内容,如果未能解决你的问题,请参考以下文章

WebView shouldOverrideUrlLoading功能

shouldOverrideUrlLoading 仅在某些网页上被调用

android webview中shouldOverrideUrlLoading方法的返回值问题

错误消息-> shouldOverrideUrlLoading Webview Android

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

Android 的 WebView 中的 shouldOverrideUrlLoading 未运行