ShouldOverrideUrlLoading не работает/улавливает ссылки при загрузке страницы

Я использую WebViewClient.shouldOverrideUrlLoading, чтобы поймать любые клики по ссылкам в WebView. Это работает примерно в 95% случаев, но иногда его просто не называют.

Я заметил это в этих трех обстоятельствах:

  • Когда ссылка указывает на страницу, она уже включена. Это не очень большая проблема, и об этом сообщается .
  • Пока страница по-прежнему загружается, если пользователь нажимает ссылку, она редко ее ловит. Он просто откроет ссылку без вызова shouldOverrideUrlLoading.
  • Произвольно. Экспериментируя с этим за последние пару месяцев, я заметил, что иногда это просто не поймает. Это редко, но это происходит.

Теперь мой вопрос в основном заключается в том, как исправить проблему 2, так как другие - это не так много. Однако, если кто-то решил 1 или 3, я хотел бы услышать об этом.

Кроме того, я должен упомянуть, что я пробовал разные возвращаемые значения в shouldOverrideUrlLoading, и я заметил, что всегда возвращающее истину, кажется, имеет лучший результат, но проблемы выше все еще происходят.

Ответы

Ответ 1

Если HTML является вашим собственным, вы можете заменить все традиционные ссылки на вызовы на свой собственный объект Java, вставляемый в WebView через addJavascriptInterface(). Тогда вы больше не будете полагаться на shouldOverrideUrlLoading().

В противном случае, возможно, попробуйте запретить пользователю взаимодействовать со страницей до onPageFinished().

Я не сталкивался с этой проблемой, но я не использовал широко используемого WebView и произвольного содержимого.

Ответ 2

У меня была аналогичная проблема при попытке изменить веб-страницу с помощью js на странице, которая изменяет window.location. Оказывается, что изменение схемы/протокола url делает захват webview на shouldOverrideUrlLoading. Я знаю, это не поможет вам, так как вы не владеете HTML, но я думал, что это поможет кому-то еще, кто наткнулся на эту проблему.