Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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 服务人员注册失败_Javascript_Browser_Service Worker_Web Push - Fatal编程技术网

Javascript 服务人员注册失败

Javascript 服务人员注册失败,javascript,browser,service-worker,web-push,Javascript,Browser,Service Worker,Web Push,我目前正在使用服务人员处理浏览器中的推送通知。目前我遇到了“软件注册失败错误”: SW注册失败,错误为SecurityError:注册ServiceWorker失败:不支持当前来源(“null”)的URL协议 检查下面的client1.html和service worker.js文件: 服务工作者.js console.log('Started',self); self.addEventListener('install',函数(事件){ 自我skipWaiting(); console.log

我目前正在使用服务人员处理浏览器中的推送通知。目前我遇到了“软件注册失败错误”:

SW注册失败,错误为SecurityError:注册ServiceWorker失败:不支持当前来源(“null”)的URL协议

检查下面的
client1.html
service worker.js
文件:

服务工作者.js

console.log('Started',self);
self.addEventListener('install',函数(事件){
自我skipWaiting();
console.log('Installed',事件);
});
self.addEventListener('activate',函数(事件){
console.log(“已激活”,事件);
});
self.addEventListener('push',函数(事件){
console.log('接收到推送消息',事件);
});
client1.html


客户1
if(导航器中的“serviceWorker”){
//注册服务人员
navigator.serviceWorker.register('service-worker.js')。然后(函数(reg){
console.log(“软件注册成功,范围为”+reg.Scope);
}).catch(函数(err){
控制台错误(“软件注册失败,错误为”+err);
});
}
有人能帮忙解决这个问题吗?

已解决: 首先,服务工作者只能在https或本地主机的安全模式下工作。 它在本地资源(如file://或http)中不起作用

第二个问题是注册期间

navigator.serviceWorkerContainer
      .register('service-worker.js')
      .then(function(reg){

使用ChromeWebServer来运行应用程序,或者只需在终端(Mac)中执行一个简单的命令即可。
python-msimplehttpserver

ServiceWorkerContainer.register的第一个参数是URL。错误消息表示您的浏览器拒绝使用某个资源,因为源文件为空-这在本地(文件://)资源中经常发生<代码>service worker.js是本地的-我敢打赌这就是为什么您会得到跨源资源问题我在代码中没有看到任何对Pusher的引用。为什么这个问题有标签?我在做网页推手。这个问题是在创建web pusher时提出的。您知道如何识别要从推送器推送的唯一浏览器吗?我被困在这一部分。只有在服务器上运行服务人员,服务人员才能工作。仅仅从finder打开index.html是不起作用的。您可以使用python-msimplehttpserver或任何其他工具开始。根据该文档,应该支持:“安全源代码”是至少匹配以下(方案、主机、端口)模式之一的源代码:(https、*)(wss、*、*)(、localhost、)(、127/8、)(、::1/128、*)(文件、*、-)(chrome扩展名、*、-)没有navigator.serviceWorkerContainer。语法为ServiceWorkerContainer.register