https://blog.csdn.net/qq_39077394/article/details/118998231

在网页开发过程中,有时需要实现聊天功能,或者在一些网站跟在线客服咨询的时候,会看到一些消息通知的提示,常见的有浏览器标签页的闪烁和屏幕右侧的消息通知。这里总结一下自己的实现方法

实现的效果:
当前窗体失焦的时候,标题开始闪动,当前窗体获取焦点的时候,则停止闪动。
并且在收到消息的同时右侧弹出消息通知。

实现标题闪烁需要用到窗口的获取焦点和失去焦点的方法,由于IE和其他Chrome及FireFox的区别,这里需要用到的方法就不一样,具体是:
Chrome和FireFox浏览器是window的onfocus, onblur方法;
而IE浏览器则是document的onfocusin, onfocusout方法;

实现通知提醒则需要用到Notification.requestPermission方法
Notification.requestPermission这是一个静态方法,作用就是让浏览器出现是否允许通知的提示

点击了允许后,则当前域名的网站就被允许在该电脑上出现通知弹框,以谷歌浏览器为例,这时依次点击:设置——高级——网站设置——近期活动,就可以在允许下面看到刚才点击了允许通知的站点的地址,如图:

下面是代码展示:


<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>我的网页</title>
    </head>
    <body>
        <h2>浏览器窗体获得焦点则停止标题闪烁通知+失去焦点则开启标题闪烁通知</h2>
        <script>
            //窗体失焦的时候,标题就会闪。
            //这里有一个小的知识点,就是浏览器窗体获得焦点和失去焦点,Chrome和FireFox浏览器是window的onfocus, onblur方法;而IE浏览器则是document的onfocusin, onfocusout方法,因此有:
            var titleInit = document.title,
                isShine = true;
            setInterval(function() {
                var title = document.title;
                if (isShine == true) {
                    if (/新/.test(title) == false) {
                        document.title = '【你有新消息】';
                    } else {
                        document.title = '【     】';
                    }
                } else {
                    document.title = titleInit;
                }
            }, 500);

            // for Chrome and FireFox
            window.onfocus = function() {
                isShine = false;
            };
            window.onblur = function() {
                isShine = true;
            };

            // for IE
            document.onfocusin = function() {
                isShine = false;
            };
            document.onfocusout = function() {
                isShine = true;
            };
        </script>


        <script>
            //实现右侧弹出消息通知
            window.onload = function() {
                suportNotify()
            }

            //判断浏览器是否支持Web Notifications API
            function suportNotify() {
                if (window.Notification) {
                    // 支持
                    console.log("支持" + "Web Notifications API");
                    //如果支持Web Notifications API,再判断浏览器是否支持弹出实例
                    showMess()
                } else {
                    // 不支持
                    alert("不支持 Web Notifications API");
                }
            }

            //判断浏览器是否支持弹出实例
            function showMess() {
                setTimeout(function() {
                    console.log('1:' + Notification.permission);
                    //如果支持window.Notification 并且 许可不是拒绝状态
                    if (window.Notification && Notification.permission !== "denied") {
                        //Notification.requestPermission这是一个静态方法,作用就是让浏览器出现是否允许通知的提示
                        Notification.requestPermission(function(status) {
                            console.log('2: ' + status);
                            //如果状态是同意
                            if (status === "granted") {
                                var m = new Notification('收到信息', {
                                    body: '这里是通知内容!你想看什么客官?', //消息体内容
                                    icon: "https://img1.baidu.com/it/u=3041604093,3909442121&fm=26&fmt=auto&gp=0.jpg" //消息图片
                                });
                                m.onclick = function() { //点击当前消息提示框后,跳转到当前页面
                                    window.focus();
                                }
                            } else {
                                alert('当前浏览器不支持弹出消息')
                            }
                        });
                    }
                }, 1000)
            }
        </script>
    </body>
</html>
文档更新时间: 2023-11-16 06:24   作者:admin