Android WebView.evaluateJavascript() 和未捕获的引用错误

Android WebView.evaluateJavascript() and uncaught reference error

提问人:Wonka Gollum 提问时间:8/14/2018 最后编辑:Wonka Gollum 更新时间:8/21/2018 访问量:5193

问:

我加载一个网页(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)

知道出了什么问题吗?我的印象是其他人没有这个问题。

javascript android webview 未定义引用

评论

0赞 Bunny 8/14/2018
你能出示你的代码吗?
0赞 Wonka Gollum 8/21/2018
我添加了HTML代码。

答:

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 文件已完全加载。