我正在尝试为我的android库开发一个cordova插件。以下是MyCordovaPlugin.js文件的一部分:
var exec = require('cordova/exec');
module.exports = {
doA : function(message, successCallback) {
exec(successCallback,
null, // No failure callback
"MyCordovaPlugin",
"doA",
[message]);
},
doB : function(message, successCallback) {
exec(successCallback,
null, // No failure callback
"MyCordovaPlugin",
"doB",
[message]);
}
};
如上所述,我有两个方法doA和doB,它们有两个参数 - message和successCallback。
在我的原生java代码中,我需要知道doA和doB中使用的successCallback是否相同。我怎样才能做到这一点?如何映射javascript函数以便我可以检查它是否已被再次使用?
我的本机java代码中有callbackContext值。但调用时的值会有所不同。
答案 0 :(得分:0)
无法在本机级别区分一个Javascript函数与另一个Javascript函数,因为本机层只是传递了一个随机生成的ID,用于调用正确的Javascript回调函数。
所以我会向你的插件方法传递一个额外的参数,它允许你在原生级别上解析它。
这样的事情:
myPlugin.js
var exec = require('cordova/exec');
module.exports = {
doA : function(message, successCallback, callbackName) {
exec(successCallback,
null, // No failure callback
"MyCordovaPlugin",
"doA",
[message, callbackName]);
},
doB : function(message, successCallback, callbackName) {
exec(successCallback,
null, // No failure callback
"MyCordovaPlugin",
"doB",
[message, callbackName]);
}
};
myApp.js
function foo(){
console.log("foo");
}
function bar(){
console.log("bar");
}
myPlugin.doA("Some message", foo, "foo");
myPlugin.doB("Some message", foo, "foo");
myPlugin.doA("Some message", bar, "bar");
myPlugin.doB("Some message", bar, "bar");
myPlugin.java
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
String message = args.getString(0);
String callbackName = args.getString(1);
// etc
}