如何监听网络通知权限变化

Posted

技术标签:

【中文标题】如何监听网络通知权限变化【英文标题】:How to listen for web notification permission change 【发布时间】:2016-05-15 01:33:19 【问题描述】:

根据 MDN 的 Notification.permission 规范,我们可以检查当前用户对 Web 通知的权限。

但是,有什么方法可以监听此权限更改?像这样?

.on(Notification.permission, 'changed', function() 

【问题讨论】:

【参考方案1】:

我相信现在回答有点晚了,但是……你可以用这个。

var Notification = window.Notification || window.mozNotification || window.webkitNotification;

var was_questioned = false;
if (Notification.permission == 'default') 
    was_questioned = true;


Notification.requestPermission(function (permission) 
    if (was_questioned) 
        console.log("User was asked. New permission is: " + permission);
    
    if ('permissions' in navigator) 
    navigator.permissions.query(name:'notifications').then(function(notificationPerm) 
        notificationPerm.onchange = function() 
            console.log("User decided to change his seettings. New permission: " + notificationPerm.state);
        ;
    );
    
);

【讨论】:

【参考方案2】:

你只需要

if ('permissions' in navigator) 
  navigator.permissions.query( name: 'notifications' ).then(function (notificationPerm) 
    notificationPerm.onchange = function () 
      console.log("User decided to change his seettings. New permission: " + notificationPerm.state);
    ;
  );

【讨论】:

几天前赞成这个答案,一切正常,但由于某种原因,它现在在 FF 中不起作用,事件不会触发。控制台中没有任何内容。铬没问题。 更新:不适用于本地,但适用于生产 oO 这种方式行不通,如果用户连续多次关闭原生通知提示,浏览器将权限改为“拒绝”,但监听器无法处理 我认为应该注意的是,这是使用Permissions API,这是一个工作草案。 @teran 您可能需要本地环境中的 ssl 证书,因为它仅适用于 secure context。

以上是关于如何监听网络通知权限变化的主要内容,如果未能解决你的问题,请参考以下文章

android 监听网络状态的变化及实战

网络推送通知未显示

如何从 iOS 可达性类中获取网络连接通知的变化?

从一个html跳到另一个htmlvue可以监听路由变化吗

如何监听通知授权状态的变化

Flutter 检测网络连接 监听网络变化