提问人:Wonka Gollum 提问时间:8/14/2018 最后编辑:Wonka Gollum 更新时间:8/21/2018 访问量:5193
Android WebView.evaluateJavascript() 和未捕获的引用错误
Android WebView.evaluateJavascript() and uncaught reference error
问:
我加载一个网页(main.html)
webview.loadUrl("file::///android_asset/main.html");
main.html:
<!DOCTYPE html>
<script>
function myTest() {
document.getElementById("myH").innerHTML = "myTest() worked"
}
</script>
<html>
<head><title>This is a test</title></head>
<body>
<h1 id="myH">This site is under development</h1>
<script>
//myTest(); this works but I need to run it programatically after page load
</script>
</body>
</html>
在 main.html 中,已经定义了一个函数 myTest(),我可以使用 main.html 中的脚本块调用它:
<script> myTest(); </script>
但是当我尝试使用 evaluateJavascript() 运行它时:
webview.evaluateJavascript("myTest()", null);
我收到错误消息:
I/chromium:[INFO:CONSOLE(1)] “未捕获的 ReferenceError:myTest 未定义”,源:(1)
知道出了什么问题吗?我的印象是其他人没有这个问题。
答:
0赞
Wonka Gollum
8/21/2018
#1
我发现这实现了我想要的:
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url){
view.loadUrl("javascript:myTest()");
}
我想当第一次调用 loadUrl() 返回时,页面可能尚未完全加载,因此 myTest() 仍未定义。我仍然对 evaluateJavascript() 的目的感到困惑,因为即使在这种情况下它也不起作用。
评论
0赞
early
4/4/2020
没错,即使我确实在 onPageFinished 事件之后强制运行 evaluateJavascript(),我也遇到了同样的错误。我的猜测是页面已加载,但js文件尚未完全完成。幸运的是,我也有对 js 文件的控制权,所以我在 Android 中调用一个函数来调用相同的 evaluateJavascript(),它确保 js 文件已完全加载。
评论