Html5中的桌面通知Notification的实现


Posted in HTML / CSS onSeptember 25, 2018

前言:对于一个前段开发者,逛网页总会留意一些新奇的功能,对于上班总会用到Teambition的我,总是能收到Notification...所以今天就来研究下这个H5功能...

1. 实例一个Notification

let n = new Notification(
"这是一个通知消息", //这是必选Title 一定会显示的通知标题

{ 
 icon: "xxx.png", // 这个icon是用来显示通知中的左边图片 
 body: "你好啊,我是xxx", 
// 通知中的内容字符

  dir: auto,





 // 文字的方向 值包含: auto(自动), ltr(从左到右), rtl(从右向左)

  tag: "gxlself"




// 给与这个通知消息一个ID, 用来对这个通知消息进行 刷新.移除.替换 等操作


// long: "en-US"






 //lang字段 需要参考https://tools.ietf.org/html/bcp47 并不是必须 没看出啥作用...


// ...





// 其余可选属性见下实例属性
}
)

访问对应的实例属性:
n.actions // 一个只读的NotificationAction对象数组。每一个对象描述用户可以在一个通知中选择的单个操作。
n.image // 通知的一部分显示的图像的URL
n.badge // 当没有足够的空间显示通知本身时,用于表示通知的图像的URL。
n.permission // 有三个值 granted, denied, 或default 当状态值为granted时可以发送通知消息 default默认用户没处理 denied 用户拒绝
n.renotify // 布尔值。新通知出现的时候是否替换之前的。如果设为true,则表示替换,表示当前标记的通知只会出现一个。注意这里的“当前标记”没?没错,true参数要想起作用,tag必须需要设置属性值。
n.requireInteraction // 布尔值, 指的是通知是否保持活动直到用户点击或取消通知 而不是自动关闭..
n.silent // 布尔值。通知出现的时候,是否要有声音。默认false, 表示无声。
n.timestamp //通知创建或者可以使用的时间。
n.data // 任意类型和通知相关联的数据。
n.vibrate // 通知显示时候,设备震动硬件需要的震动模式。所谓振动模式,指的是一个描述交替时间的数组,分别表示振动和不振动的毫秒数,一直交替下去。例如[200, 100, 200]表示设备振动200毫秒,然后停止100毫秒,再振动200毫秒。 (移动端)
n.sound // 字符串。音频地址。表示通知出现要播放的声音资源。
n.sticky // 通知吸附不容易被清除... (移动端)
n.noscreen // 布尔值。是否不再屏幕上显示通知信息。默认false, 表示要在屏幕上显示通知内容。(移动端)

此时实例 n 有四个事件处理:
1> onclick 用户对通知信息的点击事件
2> onshow 通知消息展示之后触发的事件
3> onerror 遇到错误会触发的事件
4> onclose close事件的处理

2. Notification对象会有什么属性/方法呢?利用控制台中的window对象输出点开查看就可以看到:

Html5中的桌面通知Notification的实现

值得注意的是: requestPermission()方法仅在Notification对象有效,实例对象无效!!!这个方法是用来向用户申请显示通知的权限,只能被用户主动去调用(在页面onload中可以调用,可以向用户申请,之后再去发送...)

实例对象拥有的方法有:

(1). close() 用于关闭通知消息 --> 也可以在onshow方法加延迟调用,提高用户体验感...

(2). addEventListener() 监听事件(这个通用方法)

(3). removeEventListener 卸载监听事件(通用,同上)

(4). dispatchEvent 分派事件(同上)

接下来,写一个js测试, 如果使用的是谷歌浏览器,建议在设置中显示通知将本地服务地址加入允许通知

但是,http的域名在谷歌浏览器被默认关闭,还不允许更改,查看谷歌浏览器控制台有警告信息--->

index.js:78 [Deprecation] The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gl/rStTGz for more details.

嗯,好吧,让加https证书,真的是有毒...虽然在自己的主页中添加该功能也只能在火狐浏览器爽一爽....

(腾讯云有免费一年的ssl证书,可自己进行安装...)

// index.js
window.onload = function(){
let gxlself = new Gxlself()

gxlself.requestPermission()

setTimeout(()=>{


gxlself.showNotification()

},3000)
}

class Gxlself{

 constructor(){


this.isNotificationSupported = "Notification" in window;

 }
    isPermissionGranted(){
        return Notification.permission === 'granted';
    }
    requestPermission(){
        if(!this.isNotificationSupported){
            return;
        }
        Notification.requestPermission(status=>{
            let permission = Notification.permission;
        })
    }
    showNotification(){
        if (!this.isNotificationSupported) {
            return;
        }
        if (!this.isPermissionGranted()) {
            return;
        }
        var n = new Notification("gxlself对您发来问候", {
            icon : 'gxlself.png',
            body : '欢迎来访,鄙人万分感激! 点击即可跳转至我的博客页面~'
        });
        n.onshow = function () {
            console.log('gxlself已经发送通知信息');
            setTimeout(function() {
                n.close();
            }, 5000);
        }
        n.onclick = function () {
            location.href = 'http://gxlself.com/blog'
            n.close()
        }
        n.onerror = function (err) {
            console.log(err)
        }
        n.onclose = function () {
            console.log('gxlself消息窗口关闭')
        }
    }  
}

这是火狐浏览器执行后的效果展示:

Html5中的桌面通知Notification的实现

再来看看谷歌本地跑的效果:(域名已经被默认拦截关闭,上面已经说明,不再重复)

Html5中的桌面通知Notification的实现

谷歌的效果其实挺好看的,嗯...只是一个https把我给屏蔽了 哎...

------- 桌面版应用 -----------

当你要在开放 web 应用中使用通知时,请确保将 desktop-notification 权限添加到你的 manifest 文件中。通知可以被用于任何权限级别,hosted 或更高。

"permissions": {
  
  "desktop-notification":{}

}

这个Notification比较好玩,也是未来发送消息的一个重要的一块,留此记录...希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
css3实现信纸/同学录效果的示例代码
Dec 11 HTML / CSS
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
Jan 07 HTML / CSS
纯CSS3+DIV实现小三角形边框效果的示例代码
Aug 03 HTML / CSS
HTML5如何实现元素拖拽
Mar 11 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
Feb 29 HTML / CSS
html5+css3进度条倒计时动画特效代码【推荐】
Mar 08 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
Apr 23 HTML / CSS
利用 Canvas实现绘画一个未闭合的带进度条的圆环
Jul 26 HTML / CSS
position:sticky 粘性定位的几种巧妙应用详解
Apr 24 HTML / CSS
纯html+css实现打字效果
Aug 02 HTML / CSS
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
Nov 11 HTML / CSS
使用CSS实现百叶窗效果示例代码
May 07 HTML / CSS
详解canvas drawImage()方法绘制图片不显示的问题
Oct 08 #HTML / CSS
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
Oct 08 #HTML / CSS
传统HTML页面实现模块化加载的方法
Oct 15 #HTML / CSS
html5/css3响应式页面开发总结
Oct 16 #HTML / CSS
教你如何一步一步用Canvas写一个贪吃蛇
Oct 22 #HTML / CSS
HTML高亮关键字的实现代码
Oct 22 #HTML / CSS
详解rem 适配布局
Oct 31 #HTML / CSS
You might like
杏林同学录(八)
2006/10/09 PHP
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
python统计文本文件内单词数量的方法
2015/05/30 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
浅谈django orm 优化
2018/08/18 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
python程序如何进行保存
2020/07/03 Python
Python与C/C++的相互调用案例
2021/03/04 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
干部考核评语
2014/04/29 职场文书
经营目标责任书
2015/05/08 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
Redis RDB技术底层原理详解
2021/09/04 Redis