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




document.getElementById(\"imPage\") должен возвращать null.
Значит, либо нет imPageelement, либо вы не загрузили страницу в то время.
Я бы посоветовал переместить весь ваш js-код в
document.addEventListener("DOMContentLoaded", function(event) {
//insert here
});
Тогда попробуйте удалить "\" из getElementById (\ "imPage \"), возможно, поэтому он возвращает null
Вы должны включить настройки Javascript, как показано ниже: -
view.getSettings().setJavaScriptEnabled(true); //Yes you have to do it
Да я включил =)
В моем собственном проекте я использовал 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';");}
Можете ли вы записать, какой URL-адрес передается в onPageFinished в OREO и в старых системах?