2014-11-22 133 views
1

背景PushPlugin类型错误:对象#<Object>有没有方法'EXEC

  1. 我安装PushPlugin。根据我使用自动安装的文档。但是,当我运行cordova run android,JavaScript的返回错误,“无法读取的未定义的属性pushNotification”

  2. 如果我添加

    <script type="text/javascript" charset="utf-8" src="PushNotification.js"></script> 
    

    那么错误变为一个在这个问题上的标题。

  3. 这是我的HTML如何加载脚本

    <script type="text/javascript" src="cordova.js"></script> 
    
    <script src="js/libs/jquery-1.10.2.js"></script> 
    <script src="js/libs/handlebars-1.1.2.js"></script> 
    <script src="js/libs/ember-1.5.1.js"></script> 
    
    <script type="text/javascript" src="js/index.js"></script> 
    <script type="text/javascript" src="js/model.js"></script> 
    <script type="text/javascript" src="js/router.js"></script> 
    <script type="text/javascript" src="js/controller.js"></script> 
    <script type="text/javascript" src="js/view.js"></script> 
    

    初始化代码为index.js其中deviceready后,我打电话pushNotification.register

    register完成后,我打电话MyEmberApp.deferReadiness()

  4. 自动安装插件后,我只需要运行register,根据文档。但是这仍然导致'不能读取pushNotification ....'

  5. 看起来PushNotification.jsdeviceready火灾后自动插入。但是插件没有这样做。如果我在index.html中插入脚本,则会发生错误Object has no method 'exec',因为deviceready尚未启动。

  6. deviceready

    if ('device is android') { 
        document.addEventListener("deviceready", this.onDeviceReady(), false); 
    } 
    

问题

我在做什么错?我应该怎么做?

更新

我才意识到,我只尝试自动安装。我还没有尝试过手动步骤。但这是没有理由,直接插件安装不应该工作

+2

我正在投票结束此问题,因为它是由于在我的设置中出现错误而引起的。这个问题因此无关 – Ajoy 2015-02-23 04:27:12

回答

2

我终于意识到错误是由于EventListenerdeviceready。我改变

if ('device is android') { 
     document.addEventListener("deviceready", this.onDeviceReady(), false); 
    } 

document.addEventListener("deviceready", this.onDeviceReady, false); 

,一切就正好到位。虽然这是一个粗心大意的错误,但我仍然留下这个问题,对于可能遇到此问题的其他人的答案是

1

我真的不明白,为什么你的解决方案不工作。我唯一能提供的是我的工作解决方案。可能有一些重复或出现不必要的东西,因为我自己试了35个版本之前,我得到它的工作:

的第一件事是我重视皮克事件在应用程序初始化函数和注册我的通知服务:

Ember.Application.initializer({ 
    name: 'phonegap', 

    /* ...... */ 

    initialize: function(container, application){ 
     // Push 
     container.register('notification:manager', GambifyApp.NotificationManager, { singleton: true }); 
     container.register('notification:handler', GambifyApp.NotificationHandler, { instantiate: false }); 
     container.injection('notification:handler', 'appController', 'controller:application'); 
     container.injection('notification:handler', 'commentRoute', 'route:usergroup.comment'); 
    } 
} 

然后我的经理服务正在注册设备:

GambifyApp.NotificationManager = window.GambifyApp.NotificationManager = Ember.Object.extend({ 
    init: function(){ 
     //var self = this; 
     var pushNotification = Ember.get(window, 'plugins.pushNotification'); 
     if(!Ember.isEmpty(pushNotification)){ 
      if (device.platform == 'android' || device.platform == 'Android') 
      { 
       pushNotification.register(
        this.successHandler, 
        this.errorHandler, { 
         "senderID":GambifyApp.config.android_sender_id, 
         "ecb":"window.GambifyApp.NotificationHandler.onNotificationGCM" 
        }); 
      } 
     } else { 
      Ember.Logger.error('pushNotification Plugin not running'); 
     } 
     GambifyApp.NotificationHandler.manager = this; 
    }, 

    successHandler: function (result) { }, 

    errorHandler: function (error) { 
     Ember.Logger.error('Error while registering with push:' + error); 
    }, 
}); 

然后在成功的情况下,欧洲央行正在调用这是可以通过我的处理程序的设备ID:

GambifyApp.NotificationHandler = window.GambifyApp.NotificationHandler = { 

    manager: null, 

    onNotificationGCM: function(e){ 
     console.log('---------- GCM Event:-----------'); 
     console.log(e); 

     if(e.event === "registered") { 
      console.log(e.regid); // Registraion ID 
     } 
    }, 

}; 

希望这可能有帮助。

+0

感谢您的关注。在尝试不同的方法之前,我尝试安装Cordova Device插件,但这也不起作用。 – Ajoy 2014-11-27 03:41:47

+0

看来,我已经初始化和使用Ember的方式可能是原因。我正在努力 – Ajoy 2014-11-27 06:46:08

+0

我已更新我的问题 – Ajoy 2014-11-27 09:53:37

相关问题