2011-02-26 105 views
13

我使用WebViewClient.shouldOverrideUrlLoading来捕获WebView中的任何链接点击。这约占95%的时间,但有时它不会被调用。shouldOverrideUrlLoading无法正常工作/在页面加载时捕获链接点击

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

  1. 当链接指向的网页,他们已经在。这个并不是什么大不了的,并且有一个bug reported for it
  2. 当页面仍在加载时,如果用户单击链接,它很少捕获它。它只会打开链接,而不会呼叫shouldOverrideUrlLoading
  3. 随机。在过去的几个月里对此进行实验时,我注意到有时候它并没有抓住它。这很少见,但确实发生了。现在

我的问题主要是如何解决问题2,因为其他人都少了什么大不了的。但是,如果有人解决了1或3我很想听到它。

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

+0

我试图用修改'window.location'的页面上的js修改网页时遇到了类似的问题。原来,修改url方案/协议使webview捕获'shouldOverrideUrlLoading'。 – 2011-07-07 21:23:18

+0

你在接受答案的评论中说,问题的原因是你的逻辑。你从来没有提到真正的问题是什么。我有这个问题,并从谷歌搜索似乎我不是唯一的问题。你愿意花一点时间告诉我们你是如何解决它的? – mickey 2012-02-02 18:59:52

+0

@mickey,谢谢你指出这一点。对于那个很抱歉!我在下面写了一个回复。 (在接受的答案评论中) – cottonBallPaws 2012-02-03 06:25:54

回答

7

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

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

我还没有遇到这个问题,但我还没有广泛使用WebView与任意内容,要么。

+0

感谢您的建议。不幸的是,在这种情况下,HTML不是我自己的,我不能阻止用户,因为有些页面在用户可用的时候会“加载”一段时间。所以这将是一个非常令人沮丧的UI体验。这对我来说几乎是100%的可重复性。将一个url加载到WebView中,并在加载时按下一个链接,它只是跳过覆盖呼叫。 – cottonBallPaws 2011-03-03 04:49:24

+0

这最终成为我无法捕捉的一些逻辑中的缺陷。无论如何,我会给你答案,因为你有一些很好的建议。谢谢。 – cottonBallPaws 2011-03-07 23:31:11

+1

@littleFluffyKitty你所谈论的逻辑有哪些缺陷?你应该写出来。 – ThomasW 2011-09-14 01:28:25

5

我在修改window.location的页面上尝试更改带有js的网页时遇到了类似问题。原来,修改url方案/协议使webview捕获shouldOverrideUrlLoading。我知道这并不能帮助你,因为你不拥有HTML,但我认为这会帮助其他人绊倒这个问题。