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

浏览器兼容性

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

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,