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, но я думал, что это поможет кому-то еще, кто наткнулся на эту проблему.