【问题标题】:Notification.permission in chrome always return deniedchrome 中的 Notification.permission 总是返回被拒绝
【发布时间】:2018-04-30 17:31:56
【问题描述】:

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

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

该代码起初看起来还可以,但就在今天它开始出现故障。即使尚未配置权限,所有新用户也会自动注销。

我什至尝试在地址栏左侧的图标上手动检查权限,我可以看到它仍然设置为ask(default)。我还尝试手动将其设置为Allow,但Notification.permission 函数仍然返回被拒绝。这是什么原因造成的?在我的电脑上没问题,但在所有其他用户中它会自动阻止。

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

【问题讨论】:

  • 你的意思是它可以在localhost 上工作,但不能在其他网站上工作?
  • 不,先生。我的意思是它在我的电脑上工作,但在访问该网站的其他电脑上自动注销

标签: javascript angularjs google-chrome notifications


【解决方案1】:

你有奇怪的业务逻辑,但它的价值......

Chrome 有一些规定:

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

2) 如果你注册了一个 service worker,工作更可靠(我认为它实际上是移动 chrome 所必需的)

请务必彻底阅读有关通知 API 的文档,因为您会学到一些东西。 MDN 是一个很好的资源。

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

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

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

【讨论】:

  • 谢谢!当我将 IP 地址更改为 localhost 时,它对我有帮助。
【解决方案2】:

您是否在 iframe 中加载权限?似乎是 chrome 更改,如果在 iframe 中询问,Notification.permission 将返回拒绝

【讨论】:

  • 不,先生,我正在使用 angularjs。我在我的页面控制器中执行Notification.permission,所以基本上当我加载代码执行的页面时。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2022-01-16
      • 2018-05-09
      • 2022-11-08
      • 2021-08-25
      相关资源
      最近更新 更多