4

扩展程序有没有办法向浏览器通知添加侦听器并访问它的内容?我正在尝试使用 Google 日历的通知来触发自定义功能。

4

3 回答 3

11

您可以挂钩该webkitNotifications.createNotification函数,以便在创建通知时运行某些特定代码。

  1. 创建一个名为notifhook.js的文件:

     (function() {
         // save the original function
         var origCreateNotif = webkitNotifications.createNotification;
    
         // overwrite createNotification with a new function
         webkitNotifications.createNotification = function(img, title, body) {
    
             // call the original notification function
             var result = origCreateNotif.apply(this, arguments);
    
             // bind a listener for when the notification is displayed
             result.addEventListener("display", function() {
                 // do something when the notification is displayed
                 // use img, title, and body to read the notification
                 // YOUR TRIGGERED CODE HERE!
             });
    
             return result;
         }
     })();
    
  2. 接下来,notifhook.js将清单包含在web_accessible_resources清单中。

  3. 最后,在内容脚本中,将一个<script>元素注入到页面notifhook.jssrc

     var s = document.createElement("script");
     s.src = chrome.extension.getURL("notifhook.js");
     document.documentElement.appendChild(s);
    

您可能很想仅将notifhook.js其用作内容脚本,但这行不通,因为内容脚本和网页具有不同的执行环境。覆盖内容脚本的版本webkitNotifications.createNotification根本不会影响 Google 日历页面。因此,您需要通过<script>标签注入它,这将影响页面和内容脚本。

于 2013-04-11T16:10:01.293 回答
1

上面的代码已经很老了,不能再工作了。然而,作者采用的拦截方法仍然是相同且非常有用的技巧,可以应用于多个页面。

我有关于如何访问的更新:如何捕获或收听浏览器通知?

于 2017-06-09T08:55:47.983 回答
0

如果您想要的是发送通知的 Chrome 扩展程序,则不会捕获 Google 日历。如果我没记错的话,Google 的日历会发送邮件和短信通知。另外,我认为没有 API 函数可以要求您查看是否有待处理的通知。文档中唯一得到的是 Google+ 事件通知被发送到 Google+,并且可能对 API 的访问可以捕获。

于 2013-04-11T14:50:01.567 回答