【问题标题】:shouldOverrideUrlLoading does not work/catch link clicks while page is loadingshouldOverrideUrlLoading 在页面加载时不起作用/捕获链接点击
【发布时间】:2011-02-26 19:08:25
【问题描述】:

我正在使用WebViewClient.shouldOverrideUrlLoading 来捕获 WebView 中的任何链接点击。这在大约 95% 的情况下都有效,但有时根本不会调用它。

我在这三种情况下注意到了:

  1. 当链接指向他们已经在的页面时。这个没什么大不了的,有一个bug reported for it
  2. 当页面仍在加载时,如果用户点击一个链接,它很少会捕捉到它。它只会打开链接而无需调用shouldOverrideUrlLoading
  3. 随机。在过去几个月中对此进行试验时,我注意到有时它无法捕捉到它。这种情况很少见,但确实会发生。

现在我的问题主要是如何解决问题 2,因为其他问题不大。但是,如果有人解决了 1 或 3,我很想听听。

另外,我应该提一下,我在shouldOverrideUrlLoading 中尝试了不同的返回值,我注意到总是返回 true 似乎有最好的结果,但上述问题仍然存在。

【问题讨论】:

  • 我在修改window.location的页面上尝试使用js更改网页时遇到了类似的问题。事实证明,修改 url 方案/协议会使 webview 赶上shouldOverrideUrlLoading
  • 您在对已接受答案的评论中说,问题的原因在于您的逻辑。你从来没有提到真正的问题是什么。我有这个问题,从谷歌搜索看来我不是唯一一个。您愿意花点时间告诉我们您是如何解决的吗?
  • @mickey,感谢您指出这一点。对于那个很抱歉!我在下面写了一个回复。 (在接受的答案 cmets)
  • 不!太糟糕了,但我的问题似乎和你的不一样...... :(
  • @mickey,你怎么了?与这个原始问题中描述的差不多还是不同?

标签: android android-webview webviewclient


【解决方案1】:

如果 HTML 是您自己的,您可以将所有传统链接替换为对您自己的 Java 对象的调用,通过 addJavascriptInterface() 注入到 WebView。那么你将不再依赖shouldOverrideUrlLoading()

否则,可能会尝试阻止用户与页面交互,直到onPageFinished()

我没有遇到过这个问题,但我也没有大量使用WebView的任意内容。

【讨论】:

  • 感谢您的建议。不幸的是,这种情况下的 HTML 不是我自己的,我不能阻止用户,因为某些页面在对用户非常有用之后会“加载”一段时间。所以这将是一个非常令人沮丧的 UI 体验。这对我来说几乎是 100% 可重现的。将 url 加载到 WebView 中,并在加载时按一个链接,它会跳过覆盖调用。
  • 这最终成为我没有抓住的一些逻辑缺陷。我会把答案奖励给你,因为你有一些很好的建议。谢谢。
  • @littleFluffyKitty 你说的逻辑有什么缺陷?你应该把它们写下来。
  • @ThomasW 这是很久以前的事了,但我很确定我找到了一个我返回错误的地方。我相信您必须绝对始终在 shouldOVerrideUrlLoading() 中返回 true 以避免此问题。在该方法中,如果您发现不需要覆盖负载,只需调用 webview.loadUrl(url) 而不是返回 false。
【解决方案2】:

我在修改window.location的页面上尝试使用js更改网页时遇到了类似的问题。事实证明,修改 url 方案/协议会使 webview 赶上shouldOverrideUrlLoading。我知道这对您没有帮助,因为您不拥有 HTML,但我认为它会帮助其他遇到此问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多