将值从 iOS 本机代码传递给 cordova

Posted

技术标签:

【中文标题】将值从 iOS 本机代码传递给 cordova【英文标题】:passing value from iOS native code to cordova 【发布时间】:2012-07-25 18:09:30 【问题描述】:

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

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

这是我目前所拥有的:

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: \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> ...

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 中设置代码。

【问题讨论】:

您描述的方法听起来是一种非常合理的方法,这是唯一的问题还是您无法使其正常工作? @rhooligan 我无法让它工作,我对 Objective-C 及其与 phonegap 的交互不是很熟悉。有某种例子会很棒。谢谢! 您能发布您的 Objective-C 代码,然后向我们展示您的 Cordova 代码吗?当它仍然被称为 PhoneGap 时,我写了一些插件,并且你必须在捆绑包中做一些特定的事情,以及你需要从 JS 调用的初始化序列。不过,从那时起,系统可能已经发生了一些变化。 @rhooligan 刚刚发布了我的代码,感谢您的帮助! 你能告诉我你有解决办法吗?请在这里发帖,谢谢。 【参考方案1】:

听起来你需要能够从目标 C 回话到 PhoneGap,在这种情况下你应该能够使用类似的东西:

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

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

function hello()return "hello";

这是一种与 PhoneGap 网络层对话的方式

【讨论】:

【参考方案2】:

创建一个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你的数据就能到达cordova类 如果 .js 文件命中(调用)在 .h 类中初始化的特定方法。

【讨论】:

以上是关于将值从 iOS 本机代码传递给 cordova的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从java传递给PHP?

如何将值从 javascript 传递到 iOS UIWebView

如何将值从反应本机应用程序传递到节点 js 后端

如何将值从另一个文件或命令提示符传递给类

将值从代码隐藏传递给 js

将值从后面的代码传递给 Jquery 函数