Notification.requestPermission() - Web API 接口参考 编辑

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.
});

标准

SpecificationStatusComment
Notifications APILiving StandardLiving 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!
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support5webkit[1]
22
(Yes)4.0 (2.0)moz[2]
22.0 (22.0)
未实现256[3]
promise-based version46.0?47.0 (47.0)?40未实现
FeatureAndroidAndroid WebviewEdgeFirefox Mobile (Gecko)Firefox OSIE MobileOpera MobileSafari MobileChrome 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) 中使用。

参见

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:90 次

字数:8592

最后编辑:6年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文