iOS 上的 Phonegap 触发自定义事件

Posted

技术标签:

【中文标题】iOS 上的 Phonegap 触发自定义事件【英文标题】:Phonegap fire custom events on iOS 【发布时间】:2012-03-26 07:38:12 【问题描述】:

我正在尝试在 ios 上的 phonegap 中触发自定义事件。好的,我到目前为止所做的: 我创建了一个自定义插件,我可以从 javascript 调用我的插件并且一切正常。基本上,该插件显示一个 ModalViewController 呈现一些本机功能 例如录制和编辑视频,一旦用户完成,我会将视频上传到 youtube。我想在下载完成后触发一个事件,但目前我无法执行此操作。 这是我使用的代码的一部分: 在我的 index.html 中,我通过单击按钮触发了此功能,(我不是 Javascript 开发人员)nativeFunction 基本上调用了我的自定义插件。

function testCustomPlugin()

    MyClass.nativeFunction(
                           function(result) 
                           alert("Success : \r\n"+result);      
                           ,
                           function(error) 
                           alert("Error : \r\n"+error);      
                           
    );
    document.addEventListener("post_sent",onPostSent,false);

function onPostSent()

    alert("post  sent");

这是我的 MyClass.js :

var MyClass = 
   nativeFunction: function(types, success, fail) 
   return Cordova.exec(success, fail, "MyClass", "showInterface", types);
   

在 MyClass.m 中我有两个方法:showInterface 和 sendNotification,

showInterface.m

- (void) showInterface:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options

    self.callbackID = [arguments objectAtIndex:0];
    // missing code
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(sendSuccessNotification:) 
                                             name:@"PostSentNotification" object:nil];
  

-(void)sendSuccessNotification:(NSNotification *)notification

   if (self.callbackID) 
    NSLog(@"%@",callbackID);
    NSLog(@"sendSuccessNotification");

    NSDictionary *dictionary = [NSDictionary dictionaryWithObject:@"testCallBack"
                                             forKey:@"returnValue"];
    CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK 
                                            messageAsDictionary:dictionary
   [result setKeepCallbackAsBool:YES];
   [super writeJavascript:[result toSuccessCallbackString:self.callbackID]];
   


我可以在我的日志中看到 sendSuccessNotification 被调用但事件没有被触发,我确信我在 javascript 中做错了,但问题是我不知道是什么。 在此先感谢您的帮助

【问题讨论】:

【参考方案1】:

根据您的代码,我猜您使用的是 PhoneGap / Cordova 1.5.0,对吧? 我之所以问,是因为 1.6.0 版本中更改了很多代码。

我认为下面这行是不正确的:

self.callbackID = [arguments objectAtIndex:0];

您可以通过调试字符串值自行检查。 根据我的信息,应使用以下语句为您的结果对象检索正确的回调 id:

self.callbackID = [arguments pop];

另外,请确保您已在 Cordova.plist 中注册您的插件。 希望这能解决您的问题。

最好, 马丁

【讨论】:

【参考方案2】:

您的 js 看起来确实有点奇怪 - 我建议您按照本教程进行操作(或者直接下载项目并从那里获取;-)

http://www.adobe.com/devnet/html5/articles/extending-phonegap-with-native-plugins-for-ios.html

【讨论】:

以上是关于iOS 上的 Phonegap 触发自定义事件的主要内容,如果未能解决你的问题,请参考以下文章

自定event事件之全局初始化中自动触发

在 phonegap 中打开软键盘时,未在 ios 7 上触发 showkeyboard/hidekeyboard 事件

schedult 上的 aws 自定义事件以触发 lambda 使用 Terraform

Xcode 中的 phoneGap 不会触发 Deviceready 事件

Phonegap-Pushplugin:在 iOS 中处理通知的点击事件

Cordova 没有触发 OnResume 功能 iOS