扩展程序有没有办法向浏览器通知添加侦听器并访问它的内容?我正在尝试使用 Google 日历的通知来触发自定义功能。
3 回答
您可以挂钩该webkitNotifications.createNotification
函数,以便在创建通知时运行某些特定代码。
创建一个名为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; } })();
接下来,
notifhook.js
将清单包含在web_accessible_resources
清单中。最后,在内容脚本中,将一个
<script>
元素注入到页面notifhook.js
中src
:var s = document.createElement("script"); s.src = chrome.extension.getURL("notifhook.js"); document.documentElement.appendChild(s);
您可能很想仅将notifhook.js
其用作内容脚本,但这行不通,因为内容脚本和网页具有不同的执行环境。覆盖内容脚本的版本webkitNotifications.createNotification
根本不会影响 Google 日历页面。因此,您需要通过<script>
标签注入它,这将影响页面和内容脚本。
上面的代码已经很老了,不能再工作了。然而,作者采用的拦截方法仍然是相同且非常有用的技巧,可以应用于多个页面。
我有关于如何访问的更新:如何捕获或收听浏览器通知?
如果您想要的是发送通知的 Chrome 扩展程序,则不会捕获 Google 日历。如果我没记错的话,Google 的日历会发送邮件和短信通知。另外,我认为没有 API 函数可以要求您查看是否有待处理的通知。文档中唯一得到的是 Google+ 事件通知被发送到 Google+,并且可能对 API 的访问可以捕获。