如果jsCode是:
function() {
return "test"
}
我能做到:
String js = "(" + jsCode + ") ();"
mWebView.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
Log.d("return value: ", s); // Returns the value from the function
}
});
运行javascript代码并将“test”作为Java中的值返回
但是,如果我需要更复杂的javascript代码,例如:
function() {
return test();
}
function test() {
return "test";
}
,它定义了一个函数test()并调用它;
将此javascript代码传递给webview的evaluateJavascript会出现错误:“Uncaught SyntaxError:Unexpected token function”,source:(1)
答案 0 :(得分:1)
此问题的原因是此语法无效:
(function() {
return test();
}
function test() {
return "test";
})();
这是因为包装括号尝试将内部代码作为单个函数运行,希望您可以看到它显然不是单个函数。相反,您需要将外部函数视为容器,将内部化所需的其他函数和变量。例如,这应该有效:
(function(){
function test(){
return 'hello';
}
return test();
})();
这些包装容器名为HTTPArchive