chrome中的Notification.permission始终返回拒绝

问题描述 投票:3回答:4

我有一个网站在登录期间要求用户提供通知许可。我有一个代码,当他/她拒绝许可时自动注销用户(请参阅下面的代码)

//Checks if user browsers notification is "Allowed", if "denied", logs out user
if(Notification.permission == 'denied') {
     removeAllCookies($cookies);
     $location.path("/login");
}

该代码起初似乎没问题,但就在今天它开始出现故障。所有新用户即使尚未配置权限也会自动注销。

我甚至试图在地址栏左侧的favicon处手动检查权限,我可以看到它仍然设置为ask(default)。我也尝试手动将其设置为AllowNotification.permission函数仍然返回被拒绝。是什么导致了这个?它可以在我的电脑上,但在所有其他用户中它会自动阻止。

编辑:刚才我的PC上已经遇到了同样的事情。我的通知权限是允许的,但Notification.permission总是返回denied。我控制台记录它,它确实返回拒绝。任何人?

javascript angularjs google-chrome notifications
4个回答
1
投票

你在iframe中加载权限?看起来像Chrome更改,如果在iframe中询问,Notification.permission将返回拒绝


1
投票

你已经有了奇怪的商业逻辑,但它的价值却是......

Chrome提出了一些规定:

1)必须使用HTTPS或localhost。如果您不是,它将自动拒绝我的经验权限

2)如果您注册服务工作者,我会更可靠地工作(我认为移动铬实际上是必需的)

请务必仔细阅读Notifications API周围的文档,因为您将学习一些内容。 MDN是一个很好的资源。

其他可能有用的方法是确保将您的通知逻辑包含在requestPermission承诺中:

Notification.requestPermission().then(function(permission) {
//if permission == 'denied' // logout
}

如果有任何帮助,请告诉我。


1
投票

如果您在CodePen或JSFiddle中使用,其中代码在iframe中运行,则该权限将始终在Windows和Linux上返回denied。在macOS上运行正常。


0
投票

自60版以来,从非主框架调用Notification.requestPermission()的功能已从Chrome中删除,但在撰写本文时仍可在Firefox上正常运行。

© www.soinside.com 2019 - 2024. All rights reserved.