检查firefox

时间:2018-03-26 11:52:11

标签: javascript firefox browser notifications cross-browser

可以使用Notification.permission属性检查浏览器通知的权限。

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

当用户暂时拒绝该权限时,我会检查Notification.permission属性,并返回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 :我已在WHATWG的通知存储库上打开an issue

编辑2 :我已经关闭了github问题,并且如果我已经按照@jib的建议请求用户获得权限,我会一直存在。

1 个答案:

答案 0 :(得分:1)

  

但是当我尝试显示通知时没有任何反应

您使用API​​时出错了。 requestPermission拒绝拒绝,它会以结果结算:

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

此处除granted以外的任何结果均表示您未获得许可。试一试here

  • granted表示您获得了执行通知的持久权限。
  • denied表示用户选择持续阻止您。
  • default表示用户选择不允许这一次(在Firefox中启动临时阻止)。
  

如何检查浏览器通知是否已在firefox中暂时禁用?

临时阻止只发生在Firefox中,如果你问用户两次并且他们已经说过" no"一次在同一个会话中。执行页面刷新的用户应删除该块。 Firefox目前正在保护用户免受纠缠的网站攻击。

如果您还没有问过他们,default表示会提示用户。想知道你是否已经拥有,希望很容易,如果你有,不要再打扰他们了。