首页 > 解决方案 > 火狐。InvalidStateError:尝试使用不可用或不再可用的对象

问题描述

火狐 62.0.2(64 位)。视窗 7 x64。在我们网站的firebase-messaging-sw.js 中编写代码:

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

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

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

标签: javascriptfirefoxpush-notificationweb-push

解决方案


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

我不小心发现了这个: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');

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

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

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

推荐阅读