【问题标题】:Event Listener for Web NotificationWeb 通知的事件监听器
【发布时间】:2015-09-22 18:14:40
【问题描述】:

有没有办法为桌面通知设置事件监听器?

document.addEventListener("desktop notification", function(){
    // do something
});

我查看了MDN event reference,但通知的唯一事件类型似乎仅适用于alert()

【问题讨论】:

  • 桌面通知事件可能会从浏览器发出,但它会被操作系统的窗口管理器监听。浏览器本身不会收到有关这些事件的通知。

标签: javascript jquery web


【解决方案1】:

请参阅https://github.com/jiahaog/nativefier 项目以获取工作示例。注意sn-p(来源https://github.com/jiahaog/nativefier/blob/development/app/src/static/preload.js):

function setNotificationCallback(callback) {

    const OldNotify = window.Notification;
    const newNotify = (title, opt) => {
        callback(title, opt);
        return new OldNotify(title, opt);
    };
    newNotify.requestPermission = OldNotify.requestPermission.bind(OldNotify);
    Object.defineProperty(newNotify, 'permission', {
        get: () => {
            return OldNotify.permission;
        }
    });

    window.Notification = newNotify;
}

因此,您将窗口的通知对象替换为自己的对象,该对象充当具有附加行为的代理(在创建新通知时调用回调)。

希望对你有帮助

【讨论】:

  • 这对我有很大帮助,但是,关键是在创建任何 Notification 对象之前尽早调用它
  • @Tikiboy:很高兴为您提供帮助。当然,这段代码应该作为应用程序的初始化步骤运行。
  • nativefier 帮助我加载。干杯伙伴!
  • 我正在尝试使用它来捕获松弛通知。我放了一个console.log,我可以看到脚本正在加载,但我看不到通知有任何变化。谁能指出我正确的方向?
【解决方案2】:

@marekful 是对的。除了放置全局事件侦听器之外,您还可以考虑放置回调,甚至在 Notification 对象上附加一个事件。

var noticeMe = new Notification(title, options); 
noticeMe.onshow = function() { console.log("easy!") };

可以在此处找到支持的事件的完整列表:https://developer.mozilla.org/en-US/docs/Web/API/Notification,另外here 是我几个月前写的一篇关于通知 API 的文章

看看

【讨论】:

  • 是的,我知道回调的用法,但我实际上打算在页面中注入一些 javascript 来监听我无法控制的此类通知,我不确定如果有一些我可以使用的解决方法。
  • 你弄明白了吗?我也在尝试捕获所有通知,并且无法控制通知本身的创建。
  • 也在尝试同样的事情,捕捉来自其他 webapps 的通知。你们有什么发现吗? @gauge
猜你喜欢
  • 1970-01-01
  • 2020-12-23
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2012-05-24
  • 2021-05-09
  • 1970-01-01
相关资源
最近更新 更多