正如您可能从我使用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
,这就是我问这个问题的原因。
感谢您的时间! :)
答案 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);
....
}