【问题标题】:Notification popup doesn't appear in chrome通知弹出窗口不会出现在 chrome 中
【发布时间】:2014-08-19 18:57:53
【问题描述】:

我正在尝试做一个类似 gmail 类型的桌面通知。我面临在 chrome 中更改通知权限的困难。如果我使用 window.Notification.permission,控制台中的权限总是显示拒绝。如果我手动将 google chrome 设置 -> 隐私 -> 内容设置 -> 通知中的权限更改为“不允许任何网站显示桌面通知”中的“允许所有网站显示桌面通知”。现在我可以正常获得桌面通知了。但是如果浏览器设置为“不允许任何站点显示桌面通知”,我需要一个询问权限的警报,然后我需要从弹出窗口中选择允许以将设置更改为“允许所有站点显示桌面”通知”。问题是如果我这样做,即使权限警报没有出现,权限也不会改变。权限检查脚本如下

if(Notification.permission == 'denied'){
                 Notification.requestPermission(function (status){
                        console.log("Reaching here");
                        Notification.permission = status;
                     });
            }

未出现请求允许或禁止通知的弹出窗口。提前感谢您向我提出解决方案。

【问题讨论】:

    标签: javascript google-chrome notifications html5-notifications


    【解决方案1】:

    您的脚本似乎有问题。

    这是标准的一部分,当permission 设置为denied 时,您永远不能显示询问“您要允许...发送桌面通知吗?”的弹出窗口。此弹出窗口仅在permission 设置为default 的情况下使用,这实际上意味着用户不在乎,您应该问他是否想要它们。

    这是我使用的条件:

    Notification['permission'] !== 'granted' && Notification['permission'] !== 'denied'
    

    因为并非所有浏览器都支持 default 值。加上 permission 属性在 chrome 32 之前没有实现,这就是为什么你应该使用方括号来访问它。

    事实上,你也可以删除我的条件中的denied 部分,因为如果权限被拒绝,它不会做任何事情。您可以参考this MDN documentation 以获取有关兼容性等的更多信息。

    【讨论】:

    • 是的@Depado,你是对的。我以后想通了。感谢您的回复。
    • 不客气。实际上,我希望 Notification API 能够得到一些额外的关注,因为它是一个标准。另外,我希望他们能恢复我们可以将 html 放入其中的事实。 (+ 编辑答案以提供额外信息)
    【解决方案2】:

    不打开对话框的问题是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
    

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2019-02-23
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 2013-02-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多