Notification.requestPermission()

Notification 接口的 requestPermission() 方法请求用户当前来源的权限以显示通知。

语法

最新的规范已将此方法更新为基于promise的语法,工作原理如下:

Notification.requestPermission().then(function(permission) { ... });

以前,语法是基于一个简单的回调;此版本现已弃用

Notification.requestPermission(callback);

参数

callback 可选 已废弃 Gecko 46
一个可选的参数为权限请求的结果的回调函数。此参数已废弃,请使用Promise的语法。

返回值

一个 Promise ,将解析为一个 DOMString ,它是用户对权限请求的选择。这个字符串可以是 granted(被授予), denied(被拒绝) 或者 default(默认)。

实例

下面这个代码片段将向用户请求权限,然后根据用户的不同选择,输出不同的日志。

Notification.requestPermission().then(function(result) {
  if (result === 'denied') {
    console.log('Permission wasn\'t granted. Allow a retry.');
    return;
  }
  if (result === 'default') {
    console.log('The permission request was dismissed.');
    return;
  }
  // Do something with the granted permission.
});

标准

Specification Status Comment
Notifications API Living Standard Living standard

浏览器兼容性

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 5webkit[1]
22
(Yes) 4.0 (2.0)moz[2]
22.0 (22.0)
未实现 25 6[3]
promise-based version 46.0 ? 47.0 (47.0) ? 40 未实现
Feature Android Android Webview Edge Firefox Mobile (Gecko) Firefox OS IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support ? (Yes) (Yes) (Yes) 4.0 (2.0)moz[2]
22.0 (22.0)
1.0.1moz[2]
1.2
未实现 ? 未实现 (Yes)
promise-based version ? ? ? 47.0 (47.0) ? ? ? ? ?

[1] 在 Chrome 22 之前,对于通知的支持请参考 old prefixed version of the specification 它使用 navigator.webkitNotifications 对象去实例化一个新的通知。

在 Chrome 32 之前,不支持 Notification.permission

在 Chrome 42 之前,不支持在 service worker 中使用这个API。

[2] 对于 Firefox 22 之前的版本 (Firefox OS <1.2),实例化一个新的通知必须使用 navigator.mozNotification 对象中的 createNotification 方法.

对于 Firefox 22 之前的版本 (Firefox OS <1.2),通知只会在 show 方法被调用后显示,而且只支持 click 和 close 事件。

Nick Desaulniers 写了一个 Notification shim 来同时兼容新旧两种写法。

在 Firefox OS 上有一个特殊的问题是:虽然你可以在通知中使用 包含路径的图标 ,但是如果应用被打包了,你就不能使用形如 /my_icon.png 这样的相对路径。当然你也不能使用window.location.origin + "/my_icon.png" ,因为 window.location.origin 在打包的应用中的值是nullmanifest origin field 修复了这个问题,但是它只能在 Firefox OS 1.1+ 中使用。一个潜在的支持 Firefox OS <1.1 的解决方案是 传递一个指向外部部署的图标的绝对路径的URL。这并不是一个理想的解决方案,因为这将导致通知以无图标的形式出现,然后图标才会被获取,但是这个方法适用于所有版本的 Firefox OS.

在 Firefox OS app 中使用通知的时候,确保添加 desktop-notification 权限到你的 manifest 文件中。通知即可在任何权限等级,外部部署或者像下面这样 "permissions": { "desktop-notification": {} } 的情况下使用。

[3] Safari 在 Safari 6 之后支持通知,但是只能在 Mac OSX 10.8+ (Mountain Lion) 中使用。

参见

文档标签和贡献者

标签: 
 此页面的贡献者: codehz, xgqfrms-GitHub
 最后编辑者: codehz,