Firefox 未在服务工作者中为推送消息打开 window
Firefox not opening window in service worker for Push message
Firebase 云消息传递
我已设置好所有内容,推送消息接收正常,当我单击它时,它会打开新的 window...但仅在 Chrome 中,在 Firefox 中它未打开。
我特别允许弹出窗口,但没有任何区别。
我刚调试了1个小时
self.addEventListener('notificationclick', function(e) {
console.log("This is printed to console fine");
clients.openWindow('https://example.com'); // this makes no error, nothing
});
有什么想法吗?
适用于 Firefox 47.0
不适用于 Firefox Quantum 60
订阅了一个错误。
我从 service worker 中删除:
const messaging = firebase.messaging();
它现在正在运行。
这简直是疯了。
找到原因了
仅当您(从服务器)这样发送消息有效负载时,Firebase.messaging
才是罪魁祸首:
{
"notification": {
//...
}
}
notification
属性 的存在将阻止 notificationclick
由于某种原因在 firebase sdk 中传播。
您可以发送以下内容
{
"data": {
//...
}
}
我也纠结过一段时间...
对于遇到问题的其他人,我想补充一点:
您仍然可以使用 firebase.messaging(),但您必须确保将其放在事件侦听器之后。
要明确这一点:
这不起作用(clients.openWindow 什么都不做):
const messaging = firebase.messaging();
// Add an event listener to handle notification clicks
self.addEventListener('notificationclick', function (event) {
if (event.action === 'close') {
event.notification.close();
} else if (event.notification.data.target_url && '' !== event.notification.data.target_url.trim()) {
clients.openWindow(event.notification.data.target_url);
}
});
messaging.setBackgroundMessageHandler(function (payload) {
// ... add custom notification handling ...
});
这确实有效(clients.openWindow 按预期打开 link):
// Add an event listener to handle notification clicks
self.addEventListener('notificationclick', function (event) {
if (event.action === 'close') {
event.notification.close();
} else if (event.notification.data.target_url && '' !== event.notification.data.target_url.trim()) {
clients.openWindow(event.notification.data.target_url);
}
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
// ... add custom notification handling ...
});
仍然不确定根本原因。我还怀疑 messaging() 弄乱了点击事件并使 Firefox 拒绝打开 window 因为它认为用户在通知时没有采取直接操作。
但至少我有一个解决方法并且可以继续前进。
希望对您有所帮助。
Firebase 云消息传递
我已设置好所有内容,推送消息接收正常,当我单击它时,它会打开新的 window...但仅在 Chrome 中,在 Firefox 中它未打开。
我特别允许弹出窗口,但没有任何区别。
我刚调试了1个小时
self.addEventListener('notificationclick', function(e) {
console.log("This is printed to console fine");
clients.openWindow('https://example.com'); // this makes no error, nothing
});
有什么想法吗?
适用于 Firefox 47.0
不适用于 Firefox Quantum 60
订阅了一个错误。
我从 service worker 中删除:
const messaging = firebase.messaging();
它现在正在运行。
这简直是疯了。
找到原因了
仅当您(从服务器)这样发送消息有效负载时,Firebase.messaging
才是罪魁祸首:
{
"notification": {
//...
}
}
notification
属性 的存在将阻止 notificationclick
由于某种原因在 firebase sdk 中传播。
您可以发送以下内容
{
"data": {
//...
}
}
我也纠结过一段时间...
对于遇到问题的其他人,我想补充一点:
您仍然可以使用 firebase.messaging(),但您必须确保将其放在事件侦听器之后。
要明确这一点:
这不起作用(clients.openWindow 什么都不做):
const messaging = firebase.messaging();
// Add an event listener to handle notification clicks
self.addEventListener('notificationclick', function (event) {
if (event.action === 'close') {
event.notification.close();
} else if (event.notification.data.target_url && '' !== event.notification.data.target_url.trim()) {
clients.openWindow(event.notification.data.target_url);
}
});
messaging.setBackgroundMessageHandler(function (payload) {
// ... add custom notification handling ...
});
这确实有效(clients.openWindow 按预期打开 link):
// Add an event listener to handle notification clicks
self.addEventListener('notificationclick', function (event) {
if (event.action === 'close') {
event.notification.close();
} else if (event.notification.data.target_url && '' !== event.notification.data.target_url.trim()) {
clients.openWindow(event.notification.data.target_url);
}
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
// ... add custom notification handling ...
});
仍然不确定根本原因。我还怀疑 messaging() 弄乱了点击事件并使 Firefox 拒绝打开 window 因为它认为用户在通知时没有采取直接操作。
但至少我有一个解决方法并且可以继续前进。
希望对您有所帮助。