Android WebView onPageFinished BUG

После обновления 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, потому что у меня есть другой код после завершения загрузки страницы, но этот код вызывается, когда страница белая, а не загружается.

Ответ 1

В моем собственном проекте я использую javascript 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';");}

Ответ 2

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

Таким образом, нет элемента imPage или вы не загружали страницу в то время.

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

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

Ответ 3

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

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