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