资讯专栏INFORMATION COLUMN

Web Notifications 学习

Forelax / 2506人阅读

摘要:据猜测是为浏览器翻译服务。通知内容,显示在通知标题之下,默认为空字符串标记通知的类型,打上标签,默认为空字符串。在最新的技术评审稿中,该参数被舍弃设置该标志表示最终用户将不能很容易地清除。设置该标志,通知将为永久型通知。

Web Notification

网页通知API。
这是2011年由谷歌技术员John Gregg提出的一项网页通知api。

定义

请读者直接参考whatwg工作组对这个api的定义

Notifications API

API设计
[Constructor(DOMString title, optional NotificationOptions options),
 Exposed=(Window,Worker)]
interface Notification : EventTarget {
  static readonly attribute NotificationPermission permission;
  [Exposed=Window] static void requestPermission(optional NotificationPermissionCallback callback);

  attribute EventHandler onclick;
  attribute EventHandler onshow;
  attribute EventHandler onerror;
  attribute EventHandler onclose;

  readonly attribute DOMString title;
  readonly attribute NotificationDirection dir;
  readonly attribute DOMString lang;
  readonly attribute DOMString body;
  readonly attribute DOMString tag;
  readonly attribute USVString icon;
  readonly attribute USVString sound;
  // 目前还没有暴露振动属性;见 bug 23682
  readonly attribute boolean renotify;
  readonly attribute boolean silent;
  readonly attribute boolean noscreen;
  readonly attribute boolean sticky;
  [SameObject] readonly attribute any data;

  void close();
};

dictionary NotificationOptions {
  NotificationDirection dir = "auto";
  DOMString lang = "";
  DOMString body = "";
  DOMString tag = "";
  USVString icon;
  USVString sound;
  VibratePattern vibrate;
  boolean renotify = false;
  boolean silent = false;
  boolean noscreen = false;
  boolean sticky = false;
  any data = null;
};

enum NotificationPermission {
  "default",
  "denied",
  "granted"
};

callback NotificationPermissionCallback = void (NotificationPermission permission);

enum NotificationDirection {
  "auto",
  "ltr",
  "rtl"
};

从api设计可知,该api的构造器接受两个参数,即通知标题通知参数,该对象可在window和worker上被使用

通知标题

通知标题即是指用户可见的通知内容,由容器显示在通知窗口上

通知参数

dir

通知的方向,其可用类型为: 默认自动确认, 从左及右, 从右及左。在chrome最新浏览器上亲测无用。。

lang

标记通知的标题,和身体的语言类型,默认为空字符串,若需要填写,应填写一个有效的 BCP 47 语言标记。据猜测是为浏览器翻译服务。

body

通知内容,显示在通知标题之下,默认为空字符串

tag

标记通知的类型,打上标签,默认为空字符串。使用该tag的场景是: 1.多实例通知并发操作的时候,当两个通知同时出现时,同一tag只出现一次。2.单实例时,两个定义了相同的tag的通知实体,会显示最新那个。

icon

指定通知图标,接受一个URI资源标识符字符串,不填或解析错误时,默认未定义

sound

指定通知声效,同上。在最新的Notifications技术评审稿中,该参数被舍弃

vibrate

指定通知是否震动,该参数接洽了新的vibrate api, 通过valid pattern驱动,具体请点击链接查看示例。在最新的Notifications技术评审稿中,该参数被舍弃

renotify

当一个通知列表中通知被替换时,指定该通知是否再次显示。值为true||false。在最新的Notifications技术评审稿中,该参数被舍弃

silent

该标志表示不接收声音或者振动通知,值为true||false。在最新的Notifications技术评审稿中,该参数被舍弃

noscreen

设置该标志表示设备屏幕不会被启用,值为true||false。在最新的Notifications技术评审稿中,该参数被舍弃

sticky

设置该标志表示最终用户将不能很容易地清除 notification。设置该标志,通知将为永久型通知。在最新的Notifications技术评审稿中,该参数被舍弃

data

扩展数据,在最新的Notifications技术评审稿中,该参数被舍弃

可设置的事件回调
var not = new Notification("Gebrünn Gebrünn by Paul Kalkbrenner");
// 当点击通知时
not.onclick = function () { alert("clicked") }
// 当通知出现时
not.onshow = function () { alert("show") }
// 当通知关闭时
not.onclose = function () { alert("closed") }
// 当通知发生错误时
not.onerror = function (e) { console.log(e.message) }
静态属性

Notification.permission:获取用户当前对通知的设置,包括default,denied, granted三个枚举值。default相当于禁止显示,表示用户没有设置通知许可,denied表示用户设置过不希望接受通知,同时通知是无法显示的,granted可以显示通知

静态方法

Notification.requestPermission(ptional NotificationPermissionCallback callback)该方法接受一个回调,回调带一个参数status。注意,在最新的技术评审稿中,调用该方法是异步的,会返回一个promise对象,我们完全可以点个then去处理status。

在评审稿中,它首先会设置permission = status,如果status === "default",浏览器会弹出一个小窗,询问用户对该域进行通知设置。然后异步处理我们的callback。例子如下

function notifyMessage(message, options, callback) {
    if (Notification && Notification.permission === "granted") {
        var notification = new Notification(message, options);
        callback(null, notification);
    } else if (Notification.requestPermission) {
        Notification.requestPermission(function (status) {
            if (Notification.permission !== status) {
                Notification.permission = status;
            }
            if (status === "granted") {
                var notification = new Notification(message, options);
                callback(null, notification);
            } else {
                callback(new Error("user denied"));
            }
        });
    } else {
        callback(new Error("doesn"t support Notification API"));
    }
}

function notifyMessage(message, options, callback) {
    if (Notification && Notification.permission === "granted") {
        var notification = new Notification(message, options);
        callback(null, notification);
    } else if (Notification.requestPermission) {
        Notification
            .requestPermission()
            .then(function (status) {
                new Notification(message, options);
                callback(null, notification);
            })
            .catch(function (status) {
                callback(new Error("user denied"));
            });
    } else {
        callback(new Error("doesn"t support Notification API"));
    }
}
实例方法

notification.close();直接关闭通知。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88123.html

相关文章

  • 一个简单的网页通知(Web Notifications API)实例

    摘要:一些情况下,我们希望网页可以直接向桌面推送消息。查看一个简单的例子请求权限弹出一个通知两秒后关闭通知首先,我们需要判断浏览器是否支持。如果通过向用户请求权限,这是浏览器会弹出一个是否允许显示通知的提示如果用户选择了允许,那么返回的将会是。 一些情况下,我们希望网页可以直接向桌面推送消息。本文利用 HTML5 的 Web Notifications API 来展示具体的代码该如何编写,同...

    keelii 评论0 收藏0
  • 【译】杂谈:HTML 5的消息通知机制

    摘要:原文译文的消息通知机制译者已经被应用到开发中。所以先要征求用户的许可而不是直接显示通知。然后,获取用户许可之后,我们可以显示两种类型的信息最后执行通知代码。 原文:HTML 5 Notification 译文:HTML 5 的消息通知机制 译者:dwqs showImg(https://segmentfault.com/img/bVks7a); HTML 5 已经被应用到Web...

    付伦 评论0 收藏0

发表评论

0条评论

Forelax

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<