我的iOS PhoneGap应用程序适用于PhoneGap 2.2.0,但不适用于PhoneGap 2.3.0+。 下面的代码片段在带有PhoneGap 2.2.0和2.3.0 +的iPhone模拟器6.1中表现不同:
var msg = "N/A";
EchoSession.prototype.getMessage = function() {
cordova.exec(onSuccess, onFail, "Echo", "echo", "hello-world");
console.log("message: " + msg);
return msg;
};
function onSuccess(ret)
{
console.log("onSuccess: ret is " + ret);
msg = "output: " + ret;
}
Echo
是PhoneGap插件,Echo.echo(param)
只返回传递给它的param的值。
使用PhoneGap 2.2.0,getMessage()
会返回预期结果,但是,使用PhoneGap 2.3.0 +,getMessage()
返回" N / A",这是默认值' msg',因为"返回msg"在onSuccess()回调完成之前达到语句。
我怀疑在PhoneGap 2.2.0中完成cordova.exec()时会同步返回onSuccess()回调,但在PhoneGap 2.3.0+中,onSuccess()回调是异步的。
你们对这个问题有什么看法吗?
PhoneGap 2.3.0 for iOS中是否有任何可能导致行为差异的变化?
我可以在PhoneGap 2.3.0+ for iOS中使onSuccess()
回调同步吗?
非常感谢!
答案 0 :(得分:0)
也许这个可以帮到你
确保您已在config.xml中定义插件
<feature name="CustomPlugin">
<param name="ios-package" value="CustomPlugin" />
</feature>
使用Objective-C代码实现插件
CustomPlugin.h
#import <Foundation/Foundation.h>
#import <Cordova/CDV.h>
@interface CustomPlugin : CDVPlugin
- (void)sayHello:(CDVInvokedUrlCommand*)command;
@end
CustomPlugin.m
#import "CustomPlugin.h"
@implementation CustomPlugin
- (void)sayHello:(CDVInvokedUrlCommand*)command{
NSString *responseString =
[NSString stringWithFormat:@"Hello World, %@", [command.arguments objectAtIndex:0]];
CDVPluginResult *pluginResult =
[CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:responseString];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end
从JavaScript调用插件
function initial(){
var name = $("#NameInput").val();
cordova.exec(sayHelloSuccess, sayHelloFailure, "CustomPlugin", "sayHello", [name]);
}
function sayHelloSuccess(data){
alert("OK: " + data);
}
function sayHelloFailure(data){
alert("FAIL: " + data);
}