火狐浏览器。 InvalidStateError:尝试使用一个不可用或不再可用的对象

时间:2018-09-30 07:11:54

标签: javascript firefox push-notification web-push

Firefox 62.0.2(64位)。 Windows 7 x64。在我们网站的firebase-messaging-sw.js中从this编写代码:

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

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

P.S。我正在寻找第二天的答案。 :(

1 个答案:

答案 0 :(得分:2)

在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) {
...
}

我不小心发现了这个:stopImmediatePropagation in firebase-messaging.js。 我将事件监听器移到了服务工作者的开头(在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');

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

P.S。处理程序开始工作正常,但是在执行此操作后,firebase消息库引发了错误。 event.stopImmediatePropagation()帮助:

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