将iOS本地代码的价值传递给cordova
我有我的本地代码生成的一些值,我想通过phonegap。 这些数据是实时生成的,并不会直接受到用户通过电话gui操作的影响。我的本地代码是我制作的插件的一部分。
解决这个问题的最好方法是什么? 我希望有一个函数可以随时发送数据,并在cordova端拥有一个监听器。 我在Xcode 4.3上使用Cordova 1.5。
这是我到目前为止:
swipe.js:
var swipe={
callNativeFunction: function (success, fail, resultType) {
return Cordova.exec( success, fail,
"ca.swipe",
"nativeFunction",
[resultType]); }
};
index.html的:
...
function callNativePlugin( returnSuccess ) {
swipe.callNativeFunction( nativePluginResultHandler, nativePluginErrorHandler, returnSuccess );
}
function nativePluginResultHandler (result) {
alert("SUCCESS: rn"+result );
}
function nativePluginErrorHandler (error) {
alert("ERROR: rn"+error );
} ... <body onload="onBodyLoad()"> <h1>Hey, it's Cordova!</h1>
<button onclick="callNativePlugin('success');">Success</button>
<button onclick="callNativePlugin('error');">Fail</button>
</body> ...
swipe.h:
...
@interface swipe : CDVPlugin
- (void) nativeFunction:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
swipe.m:
...
- (void) nativeFunction:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options {
NSLog(@"Hello, this is a native function called from PhoneGap/Cordova!");
//get the callback id
NSString *callbackId = [arguments pop];
NSString *resultType = [arguments objectAtIndex:0];
NSMutableArray *GlobalArg=arguments;
CDVPluginResult *result;
if ( [resultType isEqualToString:@"success"] ) {
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: @"Success :)"];
//writes back the smiley face to phone gap.
[self writeJavascript:[result toSuccessCallbackString:callbackId]];
}
...
我现在所拥有的代码对于我想做的事情没有任何帮助。 我不确定如何在cordova和native中设置代码。
听起来你需要能够从目标C回复到PhoneGap,在这种情况下,你应该能够使用类似于以下内容的东西:
NSString *jsResult = [theWebView stringByEvaluatingJavaScriptFromString:@"hello()"];
NSLog(@"jsResult=%@",jsResult);
如果你的index.html中有一个像“hello”这样的JS函数,像这样:
function hello(){return "hello";}
它是一种与PhoneGap Web层交谈的方式
创建一个CDVPlugin类型的类
在该类中导入#import
初始化一个处理程序方法.h类
- (void)Device:(CDVInvokedUrlCommand *)command;
并在.m类中实现该方法
- (void)openDevice:(CDVInvokedUrlCommand *)command{
CDVPluginResult *pluginResult = nil;
BOOL checkOpenDevice=NO;
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:checkOpenDevice];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
}
以这种方式通过self.commandDelegate,如果.js文件命中(调用)在.h类中初始化的特定方法,则您的数据将能够到达cordova类。
链接地址: http://www.djcxy.com/p/11047.html