2011-02-26 3 views
13

WebViewClient.shouldOverrideUrlLoading을 사용하여 WebView의 링크 클릭을 잡습니다. 이것은 약 95 %의 시간 동안 작동하지만 때로는 단순히 호출되지 않습니다.shouldOverrideUrlLoading이 작동하지 않음/페이지가로드되는 동안 링크 클릭 수를 잡습니다.

것은 나는이 세 가지 상황에서 그것을 발견했습니다 :

  1. 페이지에 링크 포인트가 이미있는 경우. 이건 정말 큰 문제가 아니며, bug reported for it이 있습니다.
  2. 페이지가 계속로드되는 동안 사용자가 링크를 클릭하면 드물게 캐치됩니다. shouldOverrideUrlLoading을 호출하지 않고도 링크가 열립니다.
  3. 무작위로. 지난 두 달 동안 이것을 실험하면서 때때로 나는 그것을 잡지 못한다는 것을 알았습니다. 그것은 드문 일이지만 그것은 일어납니다.

이제 제 질문은 문제 2를 해결하는 방법입니다. 다른 문제는 그다지 큰 문제가 아니기 때문입니다. 그러나 누군가가 1 또는 3 중 하나를 해결하면 그것에 대해 듣고 싶습니다.

shouldOverrideUrlLoading에서 다른 반환 값을 시도했지만 항상 최상의 결과를 얻는 것으로 보였지만 위의 문제는 여전히 발생합니다.

+0

'window.location'을 수정하는 페이지에서 js로 웹 페이지를 변경하려고 할 때 비슷한 문제가 발생했습니다. URL 스키마/프로토콜을 수정하면 웹 뷰가'shouldOverrideUrlLoading'을 캐치합니다. –

+0

허용 된 답변에 대한 의견에서 문제의 원인이 귀하의 논리에 해당한다고 말합니다. 진짜 문제가 무엇인지는 언급하지 않았습니다. 나는이 문제가있다. 그리고 인터넷 검색으로부터 나는 유일한 사람이 아닌 것처럼 보인다. 잠시 시간을내어 어떻게 해결했는지 말씀해 주시겠습니까? – mickey

+0

@mickey, 이것을 지적 해 주셔서 감사합니다. 미안합니다! 나는 아래에 응답을 썼다. (받아 들인 답안에서) – cottonBallPaws

답변

7

HTML이 자신의 것이라면 을 통해 WebView에 삽입 된 모든 기존 링크를 자신의 Java 객체 호출로 바꿀 수 있습니다. 그러면 더 이상 shouldOverrideUrlLoading()에 의존하지 않게됩니다.

그렇지 않으면 사용자가 onPageFinished()까지 페이지와 상호 작용하지 못하게하려고합니다.

이 문제는 발생하지 않았지만 임의의 콘텐츠와 함께 WebView을 광범위하게 사용하지 않았습니다.

+0

제안에 감사드립니다. 불행히도이 경우 HTML은 내 페이지가 아니며 일부 페이지는 사용자가 사용하기 쉽도록 잠시 동안 "로드"하기 때문에 사용자를 차단할 수 없습니다. 그래서 그것은 꽤 초조 한 UI 경험이 될 것입니다. 그것은 나를 위해 거의 100 % 재현 가능합니다.URL을 WebView에로드하고로드하는 동안 링크를 누르면 오버라이드 호출을 건너 뜁니다. – cottonBallPaws

+0

이것은 내가 잡히지 않은 논리에서 결함이되었다. 어쨌든 좋은 제안을했기 때문에 대답 해 드리겠습니다. 감사. – cottonBallPaws

+1

@littleFluffyKitty 당신이 말하는 논리의 결함은 무엇입니까? 당신은 그들을 써야합니다. – ThomasW

5

window.location을 수정하는 페이지에서 js로 웹 페이지를 변경하려고 할 때 비슷한 문제가 발생했습니다. URL 스키마/프로토콜을 수정하면 웹보기가 shouldOverrideUrlLoading에 걸리게됩니다. 나는 당신이 HTML을 소유하지 않았기 때문에 이것이 도움이되지 않는다는 것을 안다.하지만 나는이 문제에 걸림돌이되는 다른 사람들을 도울 것이라고 생각했다.