我如何知道浏览器通知是不是被 Windows 阻止

Posted

技术标签:

【中文标题】我如何知道浏览器通知是不是被 Windows 阻止【英文标题】:How can I know if browser notifications are blocked by Windows我如何知道浏览器通知是否被 Windows 阻止 【发布时间】:2021-07-09 04:28:40 【问题描述】:

我的网络应用程序发送浏览器通知,并且我知道如何检查通知的浏览器权限,以及如果未授予权限,如何请求权限。 但是,即使用户授予我的站点发送通知的权限,她可能仍然无法收到通知,因为它们是might be disabled(在 Windows 上全局,或在当前浏览器上)。

有没有办法让我检测到这一点并让用户知道除非她在 Windows 设置 中启用通知,否则不会显示通知?

【问题讨论】:

我认为这将是一个很大的安全问题,您是否能够从浏览器中检索操作系统的数据.. 【参考方案1】:

没有办法!

没有办法做到这一点,javascript 无法直接访问 Windows 以检测设置或更改 Windows 设置。

我很确定它是为了保护用户隐私。

受 Windows 设置影响的唯一浏览器是 Chromium 构建的浏览器。

如果您在 Windows 中关闭通知设置,Google Chrome 和 Microsoft Edge(又名Chromium 浏览器)将无法发送通知,而其他浏览器(如基于不同引擎的 Firefox)将能够发送通知。

这意味着 Google Chrome 和 Microsoft Edge 使用不同的方式来处理通知:

谷歌浏览器:

微软边缘:

虽然 Firefox 有完全不同的方式和 UI:

总结:

JavaScript 无法检测 Windows 设置中是否启用了任何通知设置。如果通知设置被禁用,Firefox 等浏览器仍然可以发送通知。

【讨论】:

【参考方案2】:

只有安全的网站,才有方法!你可以使用:

    if (!("Notification" in window)) 
    alert("No");
  

这会做什么,如果桌面通知被禁用,它会显示一个警告说“不”。

在其他一些不起作用的情况下,您可以使用

    if (Notification.permission !== 'granted')
        Notification.requestPermission();
    

【讨论】:

不,这都是浏览器内的信息。与操作系统权限无关。

以上是关于我如何知道浏览器通知是不是被 Windows 阻止的主要内容,如果未能解决你的问题,请参考以下文章

ios 阻止本地通知是不是被认为是有害的?

如何使用 Selenium Webdriver 处理浏览器级别的通知

如何静音推送通知?

在 GWT 应用程序中打开新的浏览器窗口被阻止

python 如何监测进程是不是关闭?

如何阻止文本被选中?