如何调用在Android webview中调用另一个javascript函数的javascript函数

时间:2016-09-29 03:57:25

标签: javascript android webview

如果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)

1 个答案:

答案 0 :(得分:1)

此问题的原因是此语法无效:

(function() {
    return test();
}

function test() {
    return "test";
})();

这是因为包装括号尝试将内部代码作为单个函数运行,希望您可以看到它显然不是单个函数。相反,您需要将外部函数视为容器,将内部化所需的其他函数和变量。例如,这应该有效:

(function(){

    function test(){
        return 'hello';
    }

    return test();
})();

这些包装容器名为HTTPArchive