Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webpush,如果没有选项卡,如何打开窗口_Javascript_Firefox_Service Worker_Web Push - Fatal编程技术网

Javascript webpush,如果没有选项卡,如何打开窗口

Javascript webpush,如果没有选项卡,如何打开窗口,javascript,firefox,service-worker,web-push,Javascript,Firefox,Service Worker,Web Push,我已经建立了一个网络推送系统,它工作得相当好 我的问题是,在Mac上,如果用户打开了Firefox,但在收到通知时没有打开任何页面,那么点击就会丢失。 我 他什么都不做 这是相关部分 self.addEventListener('push', function(event) { var jsonObj = event.data.json(); var title = jsonObj.title; event.waitUntil( self.registration.sho

我已经建立了一个网络推送系统,它工作得相当好

我的问题是,在Mac上,如果用户打开了Firefox,但在收到通知时没有打开任何页面,那么点击就会丢失。 我 他什么都不做

这是相关部分

self.addEventListener('push', function(event) {

  var jsonObj = event.data.json();
  var title = jsonObj.title;

  event.waitUntil(
    self.registration.showNotification(title, {
      'body': jsonObj.body,
      'icon': jsonObj.icon,
      'href': jsonObj.href,
      'tag': jsonObj.tag

    }));

    self.addEventListener('notificationclick', function(event) {
      event.notification.close();
      var href = jsonObj.href;
      var tag  = jsonObj.tag;

      if (clients.openWindow) {
        clients.openWindow(href);
      }


      /*
      // This looks to see if the current is already open and
      // focuses if it is
      event.waitUntil(
        clients.matchAll({
          type: "window"
        })
        .then(function(clientList) {
          for (var i = 0; i < clientList.length; i++) {
            var client = clientList[i];
            if (client.url == href && 'focus' in client)
              return client.focus();
          }
          if (clients.openWindow) {
            return clients.openWindow(href);
          }
        })
      );
    */
    });

});
self.addEventListener('push',函数(事件){
var jsonObj=event.data.json();
var title=jsonObj.title;
event.waitill(
自我注册。展示通知(标题{
“body”:jsonObj.body,
“icon”:jsonObj.icon,
“href”:jsonObj.href,
“tag”:jsonObj.tag
}));
self.addEventListener('notificationclick',函数(事件){
event.notification.close();
var href=jsonObj.href;
var tag=jsonObj.tag;
if(clients.openWindow){
clients.openWindow(href);
}
/*
//这将查看电流是否已打开,并且
//如果是的话
event.waitill(
客户。匹配球({
类型:“窗口”
})
.then(函数(客户端列表){
对于(var i=0;i
我建议您:

  • 定义
    通知在全局范围内的
    推送
    事件处理程序之外单击事件处理程序。您可以在
    showNotification
    data
    参数中传递
    jsonObj
    ,这样您就可以在
    notificationclick
    处理程序的
    事件
    对象中访问它。您可以在此处看到一个示例:
  • 返回一个承诺,您应该使用openWindow返回的承诺调用event.waitUntil

  • 谢谢,我将进行一些测试并发布结果。它似乎可以按预期工作,但如果浏览器没有任何窗口,它将无法打开窗口:(Firefox中当前存在一个bug,当没有打开窗口时,该bug会阻止它工作()。