我有一个侦听器的firebase消息的服务工作者:
self.addEventListener('notificationclick', function(event) {
const url = dispatchNotification(event.notification.data);
event.notification.close();
const appUrl = `${url}`;
event.waitUntil(clients.matchAll({
type: 'window',
includeUncontrolled: true
}).then( activeClients => {
if (activeClients.length > 0) {
activeClients[0].navigate(appUrl).then(client => client.focus());
} else {
clients.openWindow(appUrl);
}
})
);
});
在Firefox中,重定向效果很好,但是在Chrome中,这是这样的错误:
Uncaught (in promise) TypeError: Cannot navigate to URL: http://localhost:4100/urlParams
知道为什么它可以在firefox中完美地工作并在铬中丢弃错误?Local主机是一个安全的URL,因此不能是SSL限制。
正确显示了通知的唯一问题是重定向到标签。
这是一个古老的问题,但我会尽力回答它。目前,我只能给出部分答案,希望一旦找到整个解决方案,才能更新您。
我目前有同样的问题。当我使用firebase-messaging-sw.js文件作为我唯一的服务工作者并尝试打开客户端(从属于客户端API的客户端的意义上)时,它说它不是客户端的活动服务工作者。<<<<<<<<<<<</p>
Chrome中的控制台屏幕显示firebase-messaging-sw错误
该错误会给您提示出了什么问题。
您必须添加自己的自定义服务工作者才能将用户重定向到正确的视图。您可以通过在主JavaScript文件中执行以下操作来执行此操作:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./sw.js')
.then(registration => {
messaging.useServiceWorker(registration);
})
.catch(err => console.error(`Error while registering service worker: ${err}`));
}
这是假设您的自定义服务工作者被命名为SW.JS,并且是您的域文件夹的根。
不幸的是,我无法让我的服务工作者和firebase-messaging-sw此刻进行交流,因为我试图进行自定义推动活动,但希望这会让您朝着正确的方向开始。
更新
我终于使它在我的尽头工作,但它可能对您的问题不起作用。这取决于您拥有的架构。如果您通过Firebase或通过单页应用程序为您的资源提供服务,则可能需要与我发现的不同解决方案。
就我而言,我有一个多页应用程序,每个文件直接从服务器提供。我在开关语句中的URL不良,这意味着该文件从未"使用"。当用户单击通知时,服务工作者找不到正确的页面,最终总是打开默认页面。