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

Javascript 检查firefox中是否临时禁用了浏览器通知,javascript,firefox,browser,notifications,cross-browser,Javascript,Firefox,Browser,Notifications,Cross Browser,可以使用Notification.permission属性检查浏览器通知的权限 在firefox中,用户可以临时禁用浏览器通知。这意味着当打开新选项卡或窗口时,浏览器将请求再次显示通知的权限 当用户临时拒绝权限时,我检查Notification.permission属性,它返回default 当我运行下面的脚本时,我会在控制台中得到允许的浏览器通知作为输出 Notification.requestPermission().then((result) => { console.log

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

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

当用户临时拒绝权限时,我检查
Notification.permission
属性,它返回
default

当我运行下面的脚本时,我会在控制台中得到允许的
浏览器通知作为输出

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
的通知存储库

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

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

你用错API了。拒绝时不拒绝,它将以结果解决:

(async () => {
  try {
    console.log(await Notification.requestPermission()); // denied
  } catch (e) {
    console.log(e); // never gets here
  }
})();
除授予
之外的任何结果
在此表示您未获得权限。试试看

  • 已授予
    意味着您获得了执行通知的持久权限
  • 拒绝
    表示用户选择持续阻止您
  • default
    表示用户选择不允许此时间(在Firefox中启动临时块)
如何检查firefox中是否临时禁用了浏览器通知

在Firefox中,只有当你询问用户两次并且他们在同一会话中已经说了一次“不”时,才会出现临时阻塞。正在进行页面刷新的用户↻ 应该移除该块。此时,Firefox正在保护用户不受网站的纠缠


如果您尚未询问他们,
default
表示将提示用户。希望很容易弄清楚你是否已经有了,如果你有了,就不要再打扰他们了。

根据本页:临时残疾人应返回默认值,并应将其作为拒绝处理。如果不是这样,那么我真的看不到其他选项来实现“如果”循环的解决方案,以检查它是否为默认值。@Deadsven先生,谢谢你的推荐,但我觉得这句话有点让人困惑。当它应该与
拒绝
状态一样处理时,为什么会出现状态
默认
。当我无法详细了解用户的状态时,我如何告知用户下一步应该做什么。这需要丑陋的网站和冗长的解释,这样用户就可以使用此功能而不必成为超级用户。你读过我发送给你的网站上的内容吗?它明确指出:“默认:用户决定未知;在这种情况下,应用程序将表现为权限被拒绝。当用户的决定未知时,使用默认值。这要么是他们刚刚关闭通知,要么是他们暂时禁用通知。你不应该问我为什么“Notification.permission”方法是这样工作的,显然有人将其编码为这种方式是有原因的,但至于为什么,我无法向你提供答案,因为我没有使用这种方法。如果我冒犯了你,我很抱歉,但我的目标是检查通知是否是临时禁用的。为此,我将提出任何必要的问题。如果未来几年会增加一个新功能,这也很棒。我想改进它的工作方式,而不是仅仅解决问题。我没有生气,我只是问,因为你问了一个在文章中明确说明的问题。如果您想检查它是否是临时禁用的,我看不到其他方法,然后像这样:If(Notification.permission==“default”){//插入您想在此处执行的代码}抱歉,我没有看到其他解决方案。谢谢您的回答。我已经更新了我的问题,以便它正确使用api。这不应该有任何区别。我将坚持我已经按照建议在这个会话中询问了用户。