【发布时间】:2018-09-04 13:26:15
【问题描述】:
可以通过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 的建议向用户请求权限,我将继续存在。
【问题讨论】:
-
根据此页面:developer.mozilla.org/en-US/docs/Web/API/Notification/… 临时禁用应返回默认值,应作为拒绝处理。如果不是这种情况,那么我真的看不到其他选项来实现“if”循环的解决方法来检查它是否为默认值。
-
@mrdeadsven 感谢您的赞扬,但我觉得这句话有点令人困惑。为什么应该像
denied状态一样处理状态default。当我不详细了解他的状态时,我如何通知用户他的下一步应该是什么。这只需要丑陋的网站和冗长的解释,这样用户就可以使用此功能而无需成为超级用户。 -
您阅读了我发送给您的网站上的内容吗?它清楚地指出:'默认:用户决定是未知的;在这种情况下,应用程序的行为就像许可被拒绝一样。当用户的决定未知时使用默认值。这要么是他们刚刚关闭通知,要么是他们暂时禁用它。您不应该问我为什么“Notification.permission”方法会这样工作,显然有人将其编码为这种方式是有原因的,但至于为什么,我无法为您提供答案,因为我没有使用这种方法。
-
对不起,如果我以某种方式冒犯了您,但我的目标是检查通知是否被暂时禁用。为此,我会问任何必要的问题。如果几年后会添加一个新功能,这也很棒。我想改进它的工作方式,而不仅仅是解决问题。
-
我没有被冒犯,我只是在问,因为您问了一个在文章中明确说明的问题。如果你想检查它是否被暂时禁用,我看不到其他方法,然后是这样的: if(Notification.permission === "default"){ //insert code that you want to execute here } 抱歉,我没有看到其他解决方案为此。
标签: javascript firefox browser notifications cross-browser