在Android中通过@JavascriptInterface传递变量

时间:2017-09-15 07:21:13

标签: javascript android webview

正如您可能从我使用Android WebView的标题中了解到的那样。虽然,我有一个关于@JavascriptInterface的具体问题。我真的很好奇,如果我可以使用确切的方法来处理Javascript变量,但会从Android调用。假设我在Javascript中有一个对象,它有一个名为name的变量,那么如果我想以某种方式改变这个变量,我将使用某种函数:

function () { 
    return this.name + ' my addition';
}

我会将此函数分配给另一个将在其他地方使用的变量。现在,我想在Android中做同样的事情。假设我有一个对象Object obj,那么这个对象已经得到它name。我在@JavascriptInterface中创建的函数将是这样的:

@JavascriptInterface
public void changeName(Object obj){
    return obj.name + " my addition";
}

如果我将JavascriptInterface添加到我的WebView名为“jsinterface”,我会在Javascript中执行此操作:

function() { 
    jsinterface.changeName(this.name); 
}

但说实话它不起作用,因为obj.name为null。我知道那是因为我没有通过Object。是否有任何技巧可以使我想要或我真的需要使用webView.loadUlr("javascript: function() { ... }"};?我想避免在这里使用webView,这就是我问这个问题的原因。

感谢您的时间! :)

1 个答案:

答案 0 :(得分:0)

JavaScriptInterface只能返回或传递原始数据类型。

所以它应该是这样的......

@JavascriptInterface
public void changeName(String obj){
   ........
}

然后,您需要将JavaScript对象转换为JSONObject。并将JSONObject转换为String。 然后你可以将它传递给" changeName。"

并在Java代码中将String转换为JSONObject。

@JavascriptInterface
public void changeName(String obj){
   JSONObject js = new JSONObject(obj);
   ....
}