我正在尝试使用gmail类似的桌面通知。我很难改变Chrome中的通知权限。如果我使用 window.Notification.permission ,则权限始终在控制台中显示被拒绝。如果我在谷歌浏览器设置中手动更改权限 - >隐私 - >内容设置 - >通知为"允许所有网站显示桌面通知"来自"不允许任何网站显示桌面通知" 。现在我能正常获得桌面通知。但是如果浏览器设置为"我不需要允许任何网站显示桌面通知,我需要一个提醒来询问权限#34; ,然后我需要从弹出窗口中选择允许以将设置更改为"允许所有网站显示桌面通知"。如果我这样做,即使许可警报没有到来,问题也是不会改变权限。权限检查脚本如下
if(Notification.permission == 'denied'){
Notification.requestPermission(function (status){
console.log("Reaching here");
Notification.permission = status;
});
}
未发生用于请求允许或禁止通知的权限的弹出窗口。提前感谢您向我提出解决方案。
答案 0 :(得分:3)
您的脚本似乎有问题。
标准的一部分,当permission
设置为denied
时,您永远不会显示要求的弹出窗口#34;您是否允许...发送桌面通知?"。此弹出窗口仅在permission
设置为default
的情况下使用,这实际上意味着用户不关心,您应该询问他是否需要。
这是我使用的条件:
Notification['permission'] !== 'granted' && Notification['permission'] !== 'denied'
因为所有浏览器都不支持default
值。此外,在{35}之前未实现permission
属性,这就是您应该使用方括号访问它的原因。
事实上你也可以删除我的条件中的denied
部分,因为如果权限被拒绝,它就不会做任何事情。您可以参考this MDN documentation获取有关兼容性和类似内容的更多信息。
答案 1 :(得分:0)
不打开对话框的问题是http。 Chrome桌面通知仅适用于https协议。
我已经遇到了这个问题,并且花了很多时间来解决这个问题。终于我用https解决了。
我在这里共享了代码,因此您可以在https上运行,并且可以正常工作。
enter code here
// request permission on page load
document.addEventListener('DOMContentLoaded', function () {
if (!Notification) {
alert('Desktop notifications not available in your browser. Try Chromium.');
return;
}
if (Notification.permission !== "granted")
Notification.requestPermission();
});
function notifyMe() {
if (Notification.permission !== "granted")
Notification.requestPermission();
else {
var notification = new Notification('Notification title', {
icon: 'http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png',
body: "Hey there! You've been notified!",
});
notification.onclick = function () {
window.open("http://stackoverflow.com/a/13328397/1269037");
};
}
}
notifyMe();
Call notifyMe(); to show notification