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.
});
标准
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
在打包的应用中的值是null
。manifest 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论