7

我有一些从我的本机代码生成的值,我想传递给 phonegap。这些数据是实时生成的,不会直接受到用户通过 phonegap gui 操作的影响。我的本机代码是我制作的插件的一部分。

解决这个问题的最佳方法是什么?我想要一个随时发送数据的功能,并在科尔多瓦一侧有一个监听器。我正在使用带有 Xcode 4.3 的 Cordova 1.5。

这是我到目前为止所拥有的:

滑动.js:

var swipe={
     callNativeFunction: function (success, fail, resultType) {
    return Cordova.exec( success, fail, 
                        "ca.swipe", 
                        "nativeFunction", 
                        [resultType]); }

};

索引.html:

...

function callNativePlugin( returnSuccess ) {
            swipe.callNativeFunction( nativePluginResultHandler, nativePluginErrorHandler, returnSuccess );
        }

        function nativePluginResultHandler (result) {
            alert("SUCCESS: \r\n"+result );
        }

        function nativePluginErrorHandler (error) {
            alert("ERROR: \r\n"+error );
        } ...  <body onload="onBodyLoad()">     <h1>Hey, it's Cordova!</h1>

      <button onclick="callNativePlugin('success');">Success</button>
      <button onclick="callNativePlugin('error');">Fail</button>

  </body> ...

刷卡.h:

...
@interface swipe : CDVPlugin
- (void) nativeFunction:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end

滑动.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]];
    }

...

我现在拥有的代码没有做我想做的事。我不太确定如何在科尔多瓦和本机中设置代码。

4

2 回答 2

2

听起来您需要能够从目标 C 与 PhoneGap 对话,在这种情况下,您应该能够使用以下内容:

 NSString *jsResult = [theWebView stringByEvaluatingJavaScriptFromString:@"hello()"];
 NSLog(@"jsResult=%@",jsResult);

如果你的 index.html 中有一个像“hello”这样的 JS 函数,如下所示:

function hello(){return "hello";}

它是一种与您的 PhoneGap Web 层对话的方式

于 2012-09-13T12:06:35.080 回答
1

创建一个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 类。

于 2016-06-13T12:54:09.347 回答