cordova.exec()完成后,iOS PhoneGap onSuccess()回调是否同步返回?
我的iOS PhoneGap应用程序适用于PhoneGap 2.2.0,但不适用于PhoneGap 2.3.0+。 下面的代码片段在iPhone Simulator 6.1中与PhoneGap 2.2.0和2.3.0+的行为不同:cordova.exec()完成后,iOS PhoneGap onSuccess()回调是否同步返回?,cordova,Cordova,我的iOS PhoneGap应用程序适用于PhoneGap 2.2.0,但不适用于PhoneGap 2.3.0+。 下面的代码片段在iPhone Simulator 6.1中与PhoneGap 2.2.0和2.3.0+的行为不同: var msg = "N/A"; EchoSession.prototype.getMessage = function() { cordova.exec(onSuccess, onFail, "Echo", "echo", "hello-world");
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”的默认值,因为“return msg”语句是在onSuccess()回调完成之前到达的。
我怀疑在PhoneGap 2.2.0中完成cordova.exec()时,onSuccess()回调是同步返回的,但在PhoneGap 2.3.0+中,onSuccess()回调是异步的
你们对这个问题有什么想法吗?
iOS版PhoneGap 2.3.0是否有任何可能导致行为差异的变化?
我可以在PhoneGap 2.3.0+的iOS版中使onSuccess()
回调同步吗
非常感谢 也许这个能帮你 确保您已经在config.xml中定义了插件
<feature name="CustomPlugin">
<param name="ios-package" value="CustomPlugin" />
</feature>
从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);
}
谢谢但是我已经实现了
Echo
插件,并且在PhoneGap2.2.0中一切都很好。我的问题是,为什么同一个应用程序不适用于PhoneGap 2.3.0+,PhoneGap 2.3.0+中的onSuccess()回调处理是否有任何变化?我认为这段代码可以在cordova v2和v3上运行。我目前的cordova版本是3.4。它很好用。
#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
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);
}