cordova默認(rèn)只能回調(diào)一次,回調(diào)一次后會(huì)被銷毀,再回調(diào)js就收不到回調(diào)
方法:將 CDVPluginResult.keepCallback 設(shè)置為 true ,則不會(huì)銷毀callback
CDVPluginResult* pluginResult;
NSMutableDictionary* successDictionary = [NSMutableDictionary dictionaryWithCapacity:3];
[successDictionary setObject:[NSString stringWithFormat:@"%f",_playerView.currentTime] forKey:@"position"];
[successDictionary setObject:[NSString stringWithFormat:@"%f",_playerView.videoAllTime] forKey:@"duration"];
[successDictionary setObject:[NSString stringWithFormat:@"%@",_videoid] forKey:@"videoid"];
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:successDictionary];
//將 CDVPluginResult.keepCallback 設(shè)置為 true ,則不會(huì)銷毀callback
[pluginResult setKeepCallbackAsBool:YES];
[self.plugin.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
簡(jiǎn)單解析下多次callback原理
cordova.js 文件中:
// 接受原生callback方法
callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) {
try {
var callback = cordova.callbacks[callbackId];
// 首先判斷callback是否存在,存在則調(diào)用回調(diào)方法
if (callback) {
if (isSuccess && status == cordova.callbackStatus.OK) {
callback.success && callback.success.apply(null, args);
} else if (!isSuccess) {
callback.fail && callback.fail.apply(null, args);
}
// 如果這里沒(méi)有設(shè)置keepcallback,則默認(rèn)會(huì)把callbackid從callback數(shù)組中移除,下次就不會(huì)觸發(fā)回調(diào)方法
if (!keepCallback) {
delete cordova.callbacks[callbackId];
}
}