我有一个网站在登录期间要求用户提供通知许可。我有一个代码,当他/她拒绝许可时自动注销用户(请参阅下面的代码)
//Checks if user browsers notification is "Allowed", if "denied", logs out user
if(Notification.permission == 'denied') {
removeAllCookies($cookies);
$location.path("/login");
}
该代码起初似乎没问题,但就在今天它开始出现故障。所有新用户即使尚未配置权限也会自动注销。
我甚至试图在地址栏左侧的favicon处手动检查权限,我可以看到它仍然设置为ask(default)
。我也尝试手动将其设置为Allow
但Notification.permission
函数仍然返回被拒绝。是什么导致了这个?它可以在我的电脑上,但在所有其他用户中它会自动阻止。
编辑:刚才我的PC上已经遇到了同样的事情。我的通知权限是允许的,但Notification.permission
总是返回denied
。我控制台记录它,它确实返回拒绝。任何人?
你在iframe中加载权限?看起来像Chrome更改,如果在iframe中询问,Notification.permission将返回拒绝
你已经有了奇怪的商业逻辑,但它的价值却是......
Chrome提出了一些规定:
1)必须使用HTTPS或localhost。如果您不是,它将自动拒绝我的经验权限
2)如果您注册服务工作者,我会更可靠地工作(我认为移动铬实际上是必需的)
请务必仔细阅读Notifications API周围的文档,因为您将学习一些内容。 MDN是一个很好的资源。
其他可能有用的方法是确保将您的通知逻辑包含在requestPermission承诺中:
Notification.requestPermission().then(function(permission) {
//if permission == 'denied' // logout
}
如果有任何帮助,请告诉我。
如果您在CodePen或JSFiddle中使用,其中代码在iframe
中运行,则该权限将始终在Windows和Linux上返回denied
。在macOS上运行正常。
自60版以来,从非主框架调用Notification.requestPermission()
的功能已从Chrome中删除,但在撰写本文时仍可在Firefox上正常运行。