代码之家  ›  专栏  ›  技术社区  ›  NtFreX

检查firefox中是否临时禁用了浏览器通知

  •  2
  • NtFreX  · 技术社区  · 7 年前

    可以使用检查浏览器通知的权限 Notification.permission 所有物

    在firefox中,用户可以临时禁用浏览器通知。这意味着浏览器将请求在打开新选项卡或窗口时再次显示通知的权限。

    当用户临时拒绝权限时,我检查 通知。准许 返回的属性 default

    当我运行以下脚本时,我得到 browser notifications where allowed 作为控制台中的输出。

    Notification.requestPermission().then((result) => {
        console.log(result);
    });
    

    但当我尝试显示通知时,什么都没有发生(因为它们是临时禁用的)。


    如何检查firefox中是否临时禁用了浏览器通知?

    我可以使用以下脚本,但这是一个难看的解决方法,它会触发浏览器请求权限的对话框。我能做点别的吗?

    var calculateBrowserNotificationPermission = () => {
        return new Promise(function(resolve, reject) {
            var permission = Notification.permission;
            if(permission !== 'default') {
                resolve(permission);
                return;
            }
    
            Notification.requestPermission().then((result) => {
                if(result === 'default') {
                    resolve('temporary_denied');       
                } else {
                    resolve(result);
                }
            });
        });
    };
    

    如果还不存在这样一个功能,那么在哪里请求它是最好的呢?

    编辑1 :我已打开 an issue 在的通知存储库上 WHATWG

    编辑2 :我已经关闭了github问题,如果我已经按照@jib的建议向用户请求权限,那么我将继续存在。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jib    7 年前

    但当我尝试显示通知时,什么都没有发生

    您使用的API错误。 requestPermission 拒绝时不拒绝,解决结果如下:

    (async () => {
      try {
        console.log(await Notification.requestPermission()); // denied
      } catch (e) {
        console.log(e); // never gets here
      }
    })();
    

    任何结果 granted 这里的意思是你没有得到许可。试试看 here

    • 已授予 意味着您拥有执行通知的持久权限。
    • denied 表示用户选择持续阻止您。
    • default 表示用户选择不允许此时间(在Firefox中启动临时块)。

    如何检查firefox中是否临时禁用了浏览器通知?

    只有当你询问用户两次,并且用户在同一会话中已经说了一次“不”时,才会在Firefox中发生临时阻止。进行页面刷新的用户应删除该块。此时,Firefox正在屏蔽用户对网站的纠缠。

    如果你还没有问过他们, 违约 表示将提示用户。想清楚你是否已经有了,希望很容易,如果你有了,就不要再打扰他们了。