2011-02-26 109 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,但我認爲這會幫助其他人絆倒這個問題。