我试图从我的android代码中触发一个javascript函数,但没有成功。(对于这个例子,我已经消除了所有的混乱,但最终它需要是一个WebView,所以没有AndroidJScore)
根据我所收集的,如果我只需要单向执行(我的Java代码执行JavaScript代码),我就不需要JavaScript接口,所以我就这样设置了我的WebVIEW:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.d("Console output", consoleMessage.message());
return super.onConsoleMessage(consoleMessage);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("test();", null);
} else {
webView.loadUrl("javascript:test();");
}
}
});
webView.getSettings().setJavaScriptEnabled(true);
这意味着当页面加载后,它应该触发
测试
在javascript中的函数。
这就是它失去我的地方。我试了3种不同的
测试
函数和它们的行为都不像我期望的那样。
我从包装在CDATA中的字符串资源加载它们,如下所示:
webView.loadDataWithBaseURL("", getResources().getString(R.string.test_html),
"text/html; charset=utf-8", "UTF-8", null);
版本1,单引号“测试”
<html>
<head>
<script type="text/javascript">
function test(){
console.log('test');
}
</script>
</head>
<body>
</body>
</html>
logcat输出:
D/console输出:未捕获引用错误:未定义测试
版本2,双引号“测试”
<html>
<head>
<script type="text/javascript">
function test(){
console.log("test");
}
</script>
</head>
<body>
</body>
</html>
logcat输出:
d/console_输出:function test()console.log(test);
版本3,双引号“testme”
<html>
<head>
<script type="text/javascript">
function test(){
console.log("testme");
}
</script>
</head>
<body>
</body>
</html>
logcat输出:
d/console_160;输出:未捕获引用错误:未定义测试名称
最后一个对我来说特别奇怪,为什么需要定义“testme”?这正是我要发送到日志的内容?
关于它为什么会这样做,以及如何从Android正确地执行javascript有什么想法吗?谢谢!