Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法获取serviceWorkerRegistration_Javascript_Push Notification_Google Cloud Messaging - Fatal编程技术网

Javascript 无法获取serviceWorkerRegistration

Javascript 无法获取serviceWorkerRegistration,javascript,push-notification,google-cloud-messaging,Javascript,Push Notification,Google Cloud Messaging,我遵循这一点,使用GCM在Google Chrome上发布推送通知。我的问题是我无法完成操作!我不知道为什么 在subscribe函数中,每当试图执行时,它都会中断函数 navigator.serviceWorker.ready.then(函数(serviceWorkerRegistration){ serviceWorkerRegistration.pushManager.subscribe() .then(功能(订阅){ // ... }; }); 它没有控制台错误和控制台警

我遵循这一点,使用GCM在Google Chrome上发布推送通知。我的问题是我无法完成操作!我不知道为什么

在subscribe函数中,每当试图执行时,它都会中断函数

navigator.serviceWorker.ready.then(函数(serviceWorkerRegistration){
serviceWorkerRegistration.pushManager.subscribe()
.then(功能(订阅){
// ...
};
});       
它没有控制台错误和控制台警告,也没有输入捕获!以下是我所做的:

函数subscribe(){
var pushButton=document.querySelector('.js pushButton');
按钮。禁用=真;
navigator.serviceWorker.ready.then(函数(serviceWorkerRegistration){
serviceWorkerRegistration.pushManager.subscribe()
.then(功能(订阅){
//订阅成功
isPushEnabled=true;
putton.textContent='禁用推送消息';
按钮。禁用=错误;
控制台日志(“发送子系统”);
SendSubscriptionServer(订阅);
//TODO:将subscription.endpoint发送到服务器
//并将其保存以在以后发送推送消息
返回SendSubscriptionServer(订阅);
})  
.catch(函数(e){
如果(Notification.permission==='denied'){
//用户拒绝了通知权限,导致
//意味着我们无法订阅,用户需要
//将通知权限手动更改为
//订阅推送消息
console.warn('通知权限被拒绝');
按钮。禁用=真;
}否则{
//订阅出现问题;常见原因
//包括网络错误、缺少gcm\u发送者\u id和/或
//gcm_用户_仅在清单中可见。
控制台错误('无法订阅推送',e);
按钮。禁用=错误;
putton.textContent='启用推送消息';
}  
});  
});  
}

唯一对我有效的方法是“getRegistration”方法,用作以下代码

navigator.serviceWorker.getRegistration('/Workers/').then( r => subscribe( r ) );

其中“/Workers/”是ServiceWorker.js所在的路径

请尝试首先注册您的服务人员,因为这是使用它的第一步。这可能有助于更好地了解服务人员。