pushNotification.onDeviceReady 未定义?
Posted
技术标签:
【中文标题】pushNotification.onDeviceReady 未定义?【英文标题】:pushNotification.onDeviceReady is undefined? 【发布时间】:2012-10-03 00:30:07 【问题描述】:我正在尝试使用 Cordova 2.1.0 在我的 ios 应用上获得推送通知。
我跟着this guide 写了这封信,但我收到以下错误:
TypeError: 'undefined' is not a function (evaluating 'pushNotification.onDeviceReady()')
我不得不稍微修改一下脚本,以便在 this guide 之后将其修复为 2.0 版,这似乎可行。
我这样称呼initPushwoosh()
onDeviceReady
:
window.addEventListener('load', function ()
document.addEventListener('deviceready', function ()
initPushwoosh();
, false);
, false);
PushNotification.js
文件如下:
(function(cordova)
function PushNotification()
// Call this to register for push notifications and retreive a deviceToken
PushNotification.prototype.registerDevice = function(config, success, fail)
cordova.exec(success, fail, "PushNotification", "registerDevice", config ? [config] : []);
;
// Call this to set tags for the device
PushNotification.prototype.setTags = function(config, success, fail)
cordova.exec(success, fail, "PushNotification", "setTags", config ? [config] : []);
;
//android Only----
PushNotification.prototype.unregisterDevice = function(success, fail)
cordova.exec(success, fail, "PushNotification", "unregisterDevice", []);
;
PushNotification.prototype.startGeoPushes = function(success, fail)
cordova.exec(success, fail, "PushNotification", "startGeoPushes", []);
;
PushNotification.prototype.stopGeoPushes = function(success, fail)
cordova.exec(success, fail, "PushNotification", "stopGeoPushes", []);
;
//Android End----
//iOS only----
// Call this to send geo location for the device
PushNotification.prototype.sendLocation = function(config, success, fail)
cordova.exec(success, fail, "PushNotification", "sendLocation", config ? [config] : []);
;
PushNotification.prototype.onDeviceReady = function()
cordova.exec(null, null, "PushNotification", "onDeviceReady", []);
;
// Call this to get a detailed status of remoteNotifications
PushNotification.prototype.getRemoteNotificationStatus = function(callback)
cordova.exec(callback, callback, "PushNotification", "getRemoteNotificationStatus", []);
;
// Call this to set the application icon badge
PushNotification.prototype.setApplicationIconBadgeNumber = function(badge, callback)
cordova.exec(callback, callback, "PushNotification", "setApplicationIconBadgeNumber", [badge: badge]);
;
// Call this to clear all notifications from the notification center
PushNotification.prototype.cancelAllLocalNotifications = function(callback)
cordova.exec(callback, callback, "PushNotification", "cancelAllLocalNotifications", []);
;
//iOS End----
// Event spawned when a notification is received while the application is active
PushNotification.prototype.notificationCallback = function(notification)
var ev = document.createEvent('htmlEvents');
ev.notification = notification;
ev.initEvent('push-notification', true, true, arguments);
document.dispatchEvent(ev);
;
/* cordova.addConstructor(function()
if(!window.plugins) window.plugins = ;
window.plugins.pushNotification = new PushNotification();
); */
window.pushNotification = new PushNotification();
)(window.cordova || window.Cordova || window.PhoneGap);
function initPushwoosh()
var pushNotification = window.pushNotification;
pushNotification.onDeviceReady();
pushNotification.registerDevice(alert:true, badge:true, sound:true, pw_appid:"17009-69D5F", appname:"Snow Day",
function(status)
var deviceToken = status['deviceToken'];
console.warn('registerDevice: ' + deviceToken);
,
function(status)
console.warn('failed to register : ' + JSON.stringify(status));
navigator.notification.alert(JSON.stringify(['failed to register ', status]));
);
pushNotification.setApplicationIconBadgeNumber(0);
document.addEventListener('push-notification', function(event)
var notification = event.notification;
navigator.notification.alert(notification.aps.alert);
pushNotification.setApplicationIconBadgeNumber(0);
);
【问题讨论】:
也许你没有在 HTML 文件中包含 PushNotification.js 或者没有将它放在 www/assets 文件夹中! (我遇到了同样的错误,这是我的错) 【参考方案1】:这很奇怪,因为来自 github 的 Pushwoosh 示例几乎可以开箱即用。
确保在 cordova 脚本之后包含 PushNotification 脚本:
<script type="text/javascript" src="cordova-2.1.0.js"></script>
<script type="text/javascript" src="PushNotification.js"></script>
【讨论】:
以上是关于pushNotification.onDeviceReady 未定义?的主要内容,如果未能解决你的问题,请参考以下文章