火狐。InvalidStateError: 尝试使用不可用或不再可用的对象

Ale*_*nin 1 javascript firefox push-notification web-push

火狐 62.0.2(64 位)。视窗 7 x64。从编写代码在我们网站的火力点的消息,sw.js:

self.addEventListener('notificationclick', event => {
    event.waitUntil(async function() {
        throw "1";//this line for debug only
    }());
});
Run Code Online (Sandbox Code Playgroud)

代码在 Firefox 中的 event.waitUntil() 中引发异常“InvalidStateError:尝试使用不可用或不再可用的对象”。在 Chrome 中正常工作。为什么?我该如何解决?

PS我正在寻找第二天的答案。:(

Ana*_*nko 5

在 Firefox 63 中有这个问题。在 Chrome 中一切正常。我的服务人员代码是:

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

firebase.initializeApp({
    'messagingSenderId': '...'
});
var messaging = firebase.messaging();

self.addEventListener('notificationclick', function (event) {
...
}
Run Code Online (Sandbox Code Playgroud)

我偶然发现了这个:在 firebase-messaging.js 中的 stopImmediatePropagation。我在 service-worker 的开头(在 importScripts 之前)移动了我的事件侦听器:

self.addEventListener('notificationclick', function (event) {
...
}

importScripts('https://www.gstatic.com/firebasejs/5.5.6/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/5.5.6/firebase-messaging.js');
Run Code Online (Sandbox Code Playgroud)

处理程序开始在 Firefox 中工作。

PS Handler 开始工作正常,但在此操作之后,firebase-messaging 库抛出了错误。event.stopImmediatePropagation() 帮助:

self.addEventListener('notificationclick', function (event) {
    event.stopImmediatePropagation();
...
}
Run Code Online (Sandbox Code Playgroud)