JavaScript 兼容新旧版chrome和firefox的桌面通知

1.新/旧版本的chrome和firefox都可支持,IE下不支持因此设置为了在最小化窗口处闪烁显示提示文字。

2.设置为提示窗口显示5秒即关闭。

3.可设置图标和点击提示窗口要跳转到的页面(见输入参数)。

            var timer = null,
                title = $(‘title‘).text();  

            $(‘body‘).on(‘click‘, function() {
                clearInterval(timer);
                $(‘title‘).text(title);
            });  

            function showMsgNotification(title, msg , iconUrl ,clickUrl) {
                var Notification = window.Notification || window.mozNotification || window.webkitNotification;
                if (window.webkitNotifications) {
                    //chrome老版本
                    if (window.webkitNotifications.checkPermission() == 0) {
                        var notif = window.webkitNotifications.createNotification(iconUrl, title, msg);
                        notif.display = function() {
                             setTimeout(function() {
                                 notif.close();
                             }, 5000);
                        }
                        notif.onerror = function() {

                        }
                        notif.onclose = function() {

                        }
                        notif.onclick = function() {
                            window.focus();
                            window.location.href = clickUrl;
                        }
                        notif.replaceId = ‘Meteoric‘;
                        notif.show();
                    } else {
                        window.webkitNotifications.requestPermission($jy.notify);
                    }
                }
                else if(Notification) {//支持桌面通知
                    if(Notification.permission == "granted") {//已经允许通知
                        var instance = new Notification(title, {
                            body: msg,
                            icon: iconUrl
                            //renotify : true
                        });  

                        instance.onclick = function() {
                            //$(‘body‘).css({‘background‘: ‘red‘});
                            //console.log(‘onclick‘);
                            window.focus();
                            window.location.href = clickUrl;
                            //window.open(clickUrl, "_blank");
                        };
                        instance.onerror = function() {
                            //console.log(‘onerror‘);
                        };
                        instance.onshow = function() {
                             setTimeout(function() {
                                 instance.close();
                             }, 5000);
                        };
                        instance.onclose = function() {
                            //console.log(‘onclose‘);
                        };
                    }else {//第一次询问或已经禁止通知(如果用户之前已经禁止显示通知,那么浏览器不会再次询问用户的意见,Notification.requestPermission()方法无效)
                        Notification.requestPermission(function(status) {
                            if (status === "granted") {//用户允许
                                var instance = new Notification(title, {
                                    body: msg,
                                    icon: iconUrl
                                });  

                                instance.onclick = function() {
                                    window.focus();
                                    window.location.href = clickUrl;
                                };
                                instance.onerror = function() {
                                    // Something to do
                                };
                                instance.onshow = function() {
                                    // Something to do
                                };
                                instance.onclose = function() {
                                    // Something to do
                                };
                            }else {//用户禁止
                                return false;
                            }
                        });
                    }
                }else {//不支持(IE等)
                    var index = 0;      

                    clearInterval(timer);
                    timer = setInterval(function() {
                        if(index%2) {
                            $(‘title‘).text(‘【   】‘+ title);//这里是中文全角空格,其他不行
                        }else {
                            $(‘title‘).text(‘【快讯】‘+ title);
                        }
                        index++;  

                        if(index > 20) {
                            clearInterval(timer);
                        }
                    }, 500);
                }
            }
  
时间: 2024-11-03 22:28:06

JavaScript 兼容新旧版chrome和firefox的桌面通知的相关文章

移动端测试:优化原有功能,改动接口需要兼容新旧版本

在测试线下培训V1.0.1(月亮天使V4.8.0)时,因为在这个版本中改动了课程状态变更的逻辑,由原来的由教师点击上下课来更新课程状态,到根据排课时间,使用定时器来更新课程状态,在逻辑上有了很大的变化. 而且界面上,我的授课由原来的三个页签减少为两个,以及对应的角标数量统计等等多种情况.最初没有考虑到兼容旧版本的功能,导致修改后的接口对应不上,导致旧版的部分功能调用修改后的接口,返回参数异常等错误. 本次更新也不是强制更新的,所以后面修改接口或新增接口,兼容旧版本,以保证旧版本的正常运作,但是我

兼容 谷歌、火狐、360系列浏览器桌面通知()有用

兼容 谷歌.火狐.360系列浏览器桌面通知(有用) 本文从总结工作,并且参照大量的网络资源的.我们希望有同样需求的朋友来帮忙. (部分): http://xsk.tehon.org/den/index.php/category/tech/html5-audio-notifications.html http://ttsvetko.github.io/HTML5-Desktop-Notifications/# http://www.cnblogs.com/meteoric_cry/archive/

(转)Resources和AssetBundle(新旧版)学习

Resources: Resources的缺点:1.与显示Inspector上直接引用相比,Resources使用不方便. 2.不管你Resources上的资源是否调用了,当你发布的时候,Resources上的资源会全部一起打包掉,无法作更新. Resources里的方法: Resources.Load :动态加载特殊文件夹Resources里的文件. Resources.UnloadAsset:回收指定的缓存. Resources.UnloadUnusedAsset:回收没有被引用的缓存 这里

Resources和AssetBundle(新旧版)学习(来自蛮牛)

Resources: Resources的缺点:1.与显示Inspector上直接引用相比,Resources使用不方便. 2.不管你Resources上的资源是否调用了,当你发布的时候,Resources上的资源会全部一起打包掉,无法作更新. Resources里的方法: Resources.Load :动态加载特殊文件夹Resources里的文件. Resources.UnloadAsset:回收指定的缓存. Resources.UnloadUnusedAsset:回收没有被引用的缓存 这里

Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比

AGSDynamicLayer(ForSubclassEyesOnly) Category Reference Description This category organizes the methods that are relevant to subclassing a dynamic layer. Developer can create custom dynamic layers by paying special attention to the methods in this ca

Hbase新旧版的API

1 package com.felix.hbaseapi_test; 2 3 /* 这是旧版的 API操作 */ 16 public class hbaseapifelix { 17 18 public static final String TABLE_NAME = "testapi"; 19 public static final String COLUMNFAMILY_NAME = "cf"; 20 public static final String ROW

Windows系列远程桌面工具2020年新旧版使用

 IIS7远程桌面程序截图更新日志:2020版远程桌面截图于2020年1月8日更新,由于有客户依旧使用旧版,此页面将保留旧版截图  IIS7远程桌面程序:http://yczm.iis7.com/?lxmd 旧版远程连接工具截图 新版远程桌面工具截图 原文地址:https://www.cnblogs.com/cclxm99/p/12335104.html

快速学习Flex模型布局-兼容新旧版本css

最近在学习Flex模型布局 ,刚开始,各种属性看着头疼,现在坚持下来,把自己的学习经验分享一下: Flex模型 发展下来分三个版本: 标准版本(flex | inline-flex).混合版本(flexbox | inline-flexbox).最老版本(box | inline-box); 标准版本:IE11+已经支持啦,其他标准浏览器只要做一下兼容webkit: 混合版本:可以说是IE版本,就只有ie支持 最老版本:建议抛弃吧 --------------------------------

Android技巧小结之新旧版本Notification

最近开发用到了通知功能,但有几个地方老是提示deprecated,然后就找了篇文章学习了下新旧版本的不同. Notification即通知,用于在通知栏显示提示信息. 在较新的版本中(API level  > 11),Notification类中的一些方法被Android声明deprecated(弃用),其实基本上相当于全部弃用了,因为这个类本身方法就少得可怜. Android官方声明弃用,一定有它的理由,虽然我也不知道是什么.奈何本人轻度强迫症患者,人家都建议你不要用了,那就不要老是恪守着N年