Android WebView onPageFinished ОШИБКА

После обновления API (27) в Android OREO этот код больше не работает:

 public void onPageFinished(WebView view, String url) {
     super.onPageFinished(view, url);
     view.loadUrl("javascript:(function() {document.getElementById(\"imPage\").style.display='none';})()");
 }

Я также пробовал:

webView.loadUrl(
                    "javascript:(function() { " +

                            "document.addEventListener(\"DOMContentLoaded\", function(event) {" +

                            "document.getElementById(\"imPage\").style.display='none';" +

                            "});" +

                            "})()");

Элемент не скрывается и возвращается отладка:

I/chromium: [INFO:CONSOLE(1)] "Uncaught TypeError: Cannot read property 'style' of null", source: mywebsite/ (1)

Итак, я думаю, что javascript вводится перед загрузкой страницы, это объясняет, почему строка равна 1, потому что у меня есть другой код, вызываемый после завершения загрузки страницы, но этот код вызывается, когда страница белая, а не загружена.

Можете ли вы записать, какой URL-адрес передается в onPageFinished в OREO и в старых системах?

RadekJ 17.03.2018 18:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
1
1 079
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

document.getElementById(\"imPage\") должен возвращать null.

Значит, либо нет imPageelement, либо вы не загрузили страницу в то время.

Я бы посоветовал переместить весь ваш js-код в

document.addEventListener("DOMContentLoaded", function(event) { 
  //insert here
});

Тогда попробуйте удалить "\" из getElementById (\ "imPage \"), возможно, поэтому он возвращает null

anon 22.03.2018 15:14

Вы должны включить настройки Javascript, как показано ниже: -

view.getSettings().setJavaScriptEnabled(true); //Yes you have to do it

Да я включил =)

Marcus J.Kennedy 20.03.2018 16:29
Ответ принят как подходящий

В моем собственном проекте я использовал evaluateJavascript(script,null) в onPageFinished, чтобы скрыть элементы html. view.loadUrl() Должно работать так же.

Если вам не нужно вызывать функцию позже, вы можете упростить строку JS и вместо \" попробовать использовать '.

public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:document.getElementById('imPage').style.display='none';");}

Другие вопросы по теме