zoukankan      html  css  js  c++  java
  • Web Notifications桌面通知

    工作中遇到的问题:需要在页面写一个定时器 不停地去访问后台查看是否有新的预定订单 如果有的话要弹出在页面 而且这个弹窗要是全局的就是说不管现在管理员在浏览哪个网站的网页 他都可以看见这个弹框

    Web Notifications API

    其实这个原理很简单:首先会去判断一下当前浏览器是否支持桌面通知 如果支持 然后再去判断是否有权限弹窗

    这个权限就是当前浏览器的设置了 比如chrome

    你就可以继续下一步弹窗了 如果不支持的话 回去请求一下用户是否允许弹窗

    function notifyMe(url) {
            // Let's check if the browser supports notifications
            if (!("Notification" in window)) {
                alert("This browser does not support desktop notification");
            }
            // Let's check if the user is okay to get some notification
            else if (Notification.permission === "granted") {
                // If it's okay let's create a notification
                // var notification = new Notification("Hi there!");
                var notification = new Notification('Title', {
                    body : url,
                    //icon : './images/test1.png'
                });
                /*setTimeout(function() {
                 notification.close();
                 }, 3600000);*/
            }
    
            // Otherwise, we need to ask the user for permission
            // Note, Chrome does not implement the permission static property
            // So we have to check for NOT 'denied' instead of 'default'
            else if (Notification.permission !== 'denied') {
                Notification.requestPermission(function (permission) {
    
                    // Whatever the user answers, we make sure we store the information
                    if(!('permission' in Notification)) {
                        Notification.permission = permission;
                    }
    
                    // If the user is okay, let's create a notification
                    if (permission === "granted") {
                        var notification = new Notification('Title', {
                            body : url,
                        });
                    }
                });
            }
    
            // At last, if the user already denied any notification, and you
            // want to be respectful there is no need to bother him any more.
        }

    创建通知对象的时候可以选择的部分属性:

    通知对象所涉及到的事件:

     另外定时器是我在开源中国社区中找的JHeartbeat

    修改过后的jquery_heartbeat.js

    /*
     * jHeartbeat 0.3.0
     * download:http://www.jb51.net
     * (C)Alex Richards - http://www.ajtrichards.co.uk/
     */
     
     $.jheartbeat = {
    
        options: {
            url: "heartbeat_default.asp",
            delay: 10000,
            div_id: "test_div"
        },
        
        beatfunction:  function(){
        
        },
        
        timeoutobj:  {
            id: -1
        },
    
        set: function(options, onbeatfunction) {
            if (this.timeoutobj.id > -1) {
                clearTimeout(this.timeoutobj);
            }
            if (options) {
                $.extend(this.options, options);
            }
            if (onbeatfunction) {
                this.beatfunction = onbeatfunction;
            }
    
            // Add the HeartBeatDIV to the page
            var result = document.getElementById(this.options.div_id);
            if(result == null){
                $("body").append("<input type='hidden' id="" + this.options.div_id + "" >");
            }
            this.timeoutobj.id = setTimeout("$.jheartbeat.beat();", this.options.delay);
        },
    
        beat: function() {
            $.ajax({
                    url: this.options.url,
                    dataType: "json",
                    type: "GET",
                    /*error: function(e)   { 
                        $('#'+ $.jheartbeat.options.div_id).append("Error Requesting Data"); 
                    },*/
                    success: function(data){ 
                        $('#'+ $.jheartbeat.options.div_id).val(data.url); 
                    }
                   });
            this.timeoutobj.id = setTimeout("$.jheartbeat.beat();", this.options.delay);
            this.beatfunction();
        }
    };

    JHeartbeat使用方法:

         $(function () {
                console.log("dsfasdf");
                $.jheartbeat.set({
                    url:"/test.do",
                    delay:"10000",
                    div_id:"test_div"
                },function () {
                    var url = $('#'+ $.jheartbeat.options.div_id).val();
                    if(url != "" && url != "null"){
                        notifyMe(url);
                    }
                })
            });
  • 相关阅读:
    vue中$route和$router的区别
    vscode
    好用的天气插件
    jQuery的slideUp和slideDown函数
    在CSS/JS之后开发工作人员经常会考虑的性能优化。从用户刷新页面,一次js请求下有哪些地方需要缓存
    前端与BI
    XSS和CSRF区别
    兼容性问题
    div跟随鼠标移动
    匀速运动
  • 原文地址:https://www.cnblogs.com/programmer1/p/5897680.html
Copyright © 2011-2022 走看看