0

Мое приложение для Android вводит JS-код в WebView. Он ориентирован на Android 3.1, но я испытываю проблемы с Android 6 и 7 из-за того, что WebView теперь хромирован, поэтому он не является старым WebView.JavaScript-инъекция не работает на Android Chromium WebView, когда целевой является Android 3.1

Тем не менее, вопрос очень странно, так что я не думаю, что это из-за Quirksmode моего приложения силы к Android 6 и 7.

Моего приложение использует все полезные вызовы для загрузки интерфейса JS, которая создает привязку между кодом Java и JS-кодом, и он работает с предыдущими версиями. (метод addJavascriptInterface()) После того, как эти инструкции он выполняет «поддельные» загрузку, чтобы обеспечить интерфейс JS загружен:

webView.loadData("", "text/html", null); 

и когда «страница» загружен, он выполняет загрузку реального URL, это локальный файл (файл: /// ...); когда это загружается, скрипт вводится и выполняется.

Что я переживаю, что я получаю следующее сообщение об ошибке на непрерывно бревенчатого кошки:

Cannot call determinedVisibility() - never saw a connection for the pid: 

и я попробовал различные предложения нашли на SO об этом, но никакого успеха:

только это не " data: text/html ", который продолжает загружаться снова и снова, и я могу остановить его, только загружая пустой URL-адрес, но тогда интерфейс JS теряется.

Что мне делать, чтобы поддерживать JS-интерфейс и блокировать бесконечный цикл загрузки?

ответ

0

Этот вид проблемы был исправлен путем изменения первого «поддельного» вызова, который был предназначен для эффективного добавления интерфейса JS (он необходим) в WebView.

Вышеуказанный способ, с этой инструкцией:

webView.loadData("", "text/html", null); 

работал только с версиями старше Android 6.x (это может зависеть от устройств, так что может не также на 4.4 и 5.x, но мое приложение работало на обоих).

Так правильный метод работает на всех версиях, чтобы загрузить нужный файл дважды (выполняя новую загрузку, когда первый один закончил),

или также можно загрузить другой файл (например, простой HTML без содержимого в теле), а затем загрузите целевой файл (когда первая загрузка завершена).