增加一个自定义插件test.js,其中实现一个方法testLog,打印js传给native的字符串
config.xml配置
config.xml是Cordova的配置文件,Cordova在初始化的时候会加载其中的配置,自定义插件需要在其中注册
<feature name="Test">
<param name="ios-package" value="TestPlugin" />
<param name="onload" value="true" />
</feature>
feature中是插件的映射信息,name="Test"中Test对应的是JS中调用类名
value="TestPlugin"中TestPlugin是native端映射的OC类名
cordova_plugins.js配置
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
"id": "cordova-plugin-test",
"file": "plugins/test.js",
"pluginId": "cordova-plugin-test.test",
"clobbers": [
"Test"
]
}
];
module.exports.metadata = {
"cordova-plugin-test.test": "1.0.0"
};
});
id是唯一标识符,对应插件test.js中的id,两者必须相同。file是插件的相对路径。clobbers是JS中调用插件的接口
test.js配置
cordova.define("cordova-plugin-test", function(require, exports, module) {
var exec = require('cordova/exec');
function Test() {};
Test.prototype.testLog = function (suc, err, arg) {
exec(suc, err, 'Test', 'testLog', [arg]);
};
var test = new Test();
module.exports = test;
});
"cordova-plugin-test"就是cordova_plugins.js中的id,两者相同。exec()方法中有4个参数,分别为成功回调,失败回调,类名(config.xml中的name),OC中TestPlugin类中的方法名,参数列表。
OC中的映射类配置
新增一个继承于CDVPlugin的类,类名TestPlugin。新增一个实例方法testLog。
@implementation TestPlugin
- (void)testLog:(CDVInvokedUrlCommand*)command {
NSString *arg = command.arguments.firstObject;
NSLog(@"TestPlugin-testLog ==> %@", arg);
CDVPluginResult *result;
if(arg.length > 0) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:arg];
} else {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:arg];
}
[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];
}
@end
index.html配置
在script中添加
function success(arg) {
alert(arg);
}
function error() {
alert(arg);
}
Test.testLog(success, error, "123");
JS调OC:Test.testLog(success, error, "123");TestPlugin类中的testLog被调用,并且传过去的字符串“123”被打印。
OC调JS:TestPlugin类中[self.commandDelegate sendPluginResult:result callbackId:command.callbackId];把字符串“123”当做结果回调给JS,JS中的success被调用。
网友评论