var NotificationHandler = {
        isNotificationSupported: ‘Notification‘ in window,
        isPermissionGranted: function () {
            return Notification.permission === ‘granted‘;
        },
        requestPermission: function () {
            if (!this.isNotificationSupported) {
                console.log(‘当前浏览器不支持Notification API‘);
                return;
            }
            Notification.requestPermission(function (status) {
                var permission = Notification.permission;
            });
        },
        showNotification: function (Title, ImgUrl, Content, Tag) {
            if (!this.isNotificationSupported) {
                console.log(‘当前浏览器不支持Notification API‘);
                return;
            }
            if (!this.isPermissionGranted()) {
                Notification.requestPermission(function (permission) {
                    // 如果用户同意,就可以向他们发送通知
                    if (permission === "granted") {
                        var n = new Notification(Title, {
                            icon: ImgUrl,
                            body: Content,
                            tag: Tag,
                            requireInteraction: true
                        });
                        n.onshow = function () {
                        };
                        //消息框被点击时被调用  
                        //可以打开相关的视图,同时关闭该消息框等操作  
                        n.onclick = function () {
                            alert(1);
                            //n.close();
                        };
                        //当有错误发生时会onerror函数会被调用  
                        //如果没有granted授权,创建Notification对象实例时,也会执行onerror函数  
                        n.onerror = function () {
                            //do something useful  
                        };
                        //一个消息框关闭时onclose函数会被调用  
                        n.onclose = function () {
                            stopSound();
                            UpdateIsRead(n.tag);
                        };
                    }
                });
            } else {
                var n = new Notification(Title, {
                    icon: ImgUrl,
                    body: Content,
                    tag: Tag,
                    requireInteraction:true//设置为true 那么关闭就只有是用户来关闭  这样就可以保证是用户操作 (缺点  必须要用户去操作一次)
                });
                n.onshow = function () {
                };
                //消息框被点击时被调用  
                //可以打开相关的视图,同时关闭该消息框等操作  
                n.onclick = function () {
                    //alert(1);
                    //n.close();
                };
                //当有错误发生时会onerror函数会被调用  
                //如果没有granted授权,创建Notification对象实例时,也会执行onerror函数  
                n.onerror = function () {
                    //do something useful  
                };
                //一个消息框关闭时onclose函数会被调用  
                n.onclose = function () {
                    stopSound();
                    UpdateIsRead(n.tag);
                };
            }
        }
    };
原文:https://www.cnblogs.com/lovemj/p/9989196.html