Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 service worker安装过程中的Firebase消息警告消息_Javascript_Firebase_Firebase Cloud Messaging_Service Worker - Fatal编程技术网

Javascript service worker安装过程中的Firebase消息警告消息

Javascript service worker安装过程中的Firebase消息警告消息,javascript,firebase,firebase-cloud-messaging,service-worker,Javascript,Firebase,Firebase Cloud Messaging,Service Worker,我使用firebase进行推送web通知,我的文件firebase messaging ws.js如下所示: 进口文件('https://www.gstatic.com/firebasejs/7.19.0/firebase-app.js'); 进口文件('https://www.gstatic.com/firebasejs/7.19.0/firebase-messaging.js'); 获取('./firebase data.json') .then(r=>r.json()) .然后(fbDa

我使用firebase进行推送web通知,我的文件
firebase messaging ws.js
如下所示:


进口文件('https://www.gstatic.com/firebasejs/7.19.0/firebase-app.js');
进口文件('https://www.gstatic.com/firebasejs/7.19.0/firebase-messaging.js');
获取('./firebase data.json')
.then(r=>r.json())
.然后(fbData=>{
设app=firebase.initializeApp(fbData);
firebase.messaging(应用程序);
log('Firebase Service Worker已为projectId加载:',fbData.projectId);
}).catch(错误=>{
console.error('配置firebase消息时出错:',错误)
});
我正在使用一个json文件,
firebase data.json
来加载firebase配置数据,如果我使用本地对象(不带fetch()命令),我可以接收推送通知,但是当我调用
firebase.messaging()
,控制台中会出现几个日志警告然后一切正常,没有警告信息

日志消息类似于“XXX”事件的
事件处理程序,必须添加到辅助脚本的初始评估中。


使用外部文件加载firebase配置数据时,是否可以避免出现警告消息?

基本上,服务工作者脚本需要同步执行,这意味着您无法在承诺范围内初始化firebase消息

在这里,这是未经测试的,但试试这个:

importScripts('https://www.gstatic.com/firebasejs/7.19.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.19.0/firebase-messaging.js');

const response = await fetch('./firebase-data.json');
const fbData = await response.json();

let app = firebase.initializeApp(fbData);    
firebase.messaging(app);
console.log('Firebase Service Worker loaded for projectId:', fbData.projectId);
或者,如果它不喜欢在异步函数之外等待,请使用JavaScript导出配置数据,并使用importScripts将其公开给服务人员:

firebase data.js

const fbData = {...};
importScripts('https://www.gstatic.com/firebasejs/7.19.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.19.0/firebase-messaging.js');
importScripts('./firebase-data.js');

let app = firebase.initializeApp(fbData);    
firebase.messaging(app);
console.log('Firebase Service Worker loaded for projectId:', fbData.projectId);
firebase messaging ws.js

const fbData = {...};
importScripts('https://www.gstatic.com/firebasejs/7.19.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.19.0/firebase-messaging.js');
importScripts('./firebase-data.js');

let app = firebase.initializeApp(fbData);    
firebase.messaging(app);
console.log('Firebase Service Worker loaded for projectId:', fbData.projectId);

正如另一个答案所解释的,将
fbData
移动到
js
文件允许在服务工作者脚本中使用变量

为了记录在案,我这么做是为了在服务人员范围和Angular应用程序范围之间共享Firebase数据,
Firebase data.js
如下所示:


常量FIREBASE_数据={
“apiKey”:“**********”,
“authDomain”:“************.firebaseapp.com”,
“数据库URL”:“https://************.firebaseio.com”,
“projectId”:“**********”,
“storageBucket”:“************.appspot.com”,
“messagingSenderId”:“*************”,
“appId”:“1:***************”
}
if(模块类型!==“未定义”){
module.exports={…FIREBASE_DATA}
}
通过此实现,我可以在service worker文件中使用
self.FIREBASE\u数据
,还可以在我的angualr应用程序中导入模块,por实例mi
环境。ts
类似于:

从“./FIREBASE DATA”导入FIREBASE\u数据;
导出常量环境={
制作:对,,
url_base:“/api”,
firebase:firebase_数据
};

谢谢你,Brian,
wait
opton没有任何区别,但是将varaible
fbData
定义到js文件中就可以了。