作者:致力于流浪动物救助量 | 来源:互联网 | 2023-05-22 12:16
您可以通过运行以下命令提示用户允许或拒绝来自浏览器的桌面通知:
Notification.requestPermission(callback);
但是可以通过代码删除该权限吗?我们希望用户可以选择切换通知.这可以通过Javascript实现,还是我们需要在其他地方保存该选项?
1> user369450..:
综观上的文档通知的MDN和WHATWG,似乎没有要请求的权限撤销的方式.但是,您可以使用localStorage模拟自己的权限版本,以支持缺少的功能.假设您有一个切换通知的复选框.
您可以将记住的权限notification-permissions
存储在本地存储中的密钥下,并更新权限状态,类似于:
function toggleNotificationPermissions(input) {
if (Notification.permissiOns=== 'granted') {
localStorage.setItem('notification-permissions', input.checked ? 'granted' : 'denied');
} else if (Notification.permissiOns=== 'denied') {
localStorage.setItem('notification-permissions', 'denied');
input.checked = false;
} else if (Notification.permissiOns=== 'default') {
Notification.requestPermission(function(choice) {
if (choice === 'granted') {
localStorage.setItem('notification-permissions', input.checked ? 'granted' : 'denied');
} else {
localStorage.setItem('notification-permissions', 'denied');
input.checked = false;
}
});
}
}
您可以将权限检索为:
function getNotificationPermissions() {
if (Notification.permissiOns=== 'granted') {
return localStorage.getItem('notification-permissions');
} else {
return Notification.permissions;
}
}
如果要显示通知,请检查您的权限:
if (getNotificationPermissions() === 'granted') {
new Notification(/*...*/);
}
2> apsillers..:
不,您的脚本无法以编程方式放弃显示通知的权限.该API规范没有任何权限相关的功能除了requestPermission
.(当然,浏览器可能有一个选项菜单,允许用户撤消域的权限,但这是浏览器级选项,而不是网站级选项.例如,在Chrome中,您可以看到此选项菜单单击地址栏左侧的图标.)
如果您不想显示通知,只需不要打电话new Notification
.
您可以将所有调用包装到new Notification
内部条件中:
if(notifications_allowed) {
new Notification(...);
}
或者您可以重写Notification
构造函数以包含contiditional并在Notification
适当时调用原始:
(function() {
var oldNofitication = Notification;
Notification = function() {
if(notifications_allowed) {
oldNotification.apply(this, arguments);
}
}
})();
如果您使用供应商前缀的构造函数或函数(例如webkitNotifications.createNotification
),那么您还需要重写每个构造函数或函数,以条件取决于您的options变量.