How can I listen to notifications?

google-chrome-extension

Solution

You can hook the `webkitNotifications.createNotification` function so that whenever a notification is created you run some particular code.

Create a file called 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;
     }
 })();

Next, include `notifhook.js` in your `web_accessible_resources` list in your manifest.

Finally, in a content script, inject a `<script>` element into the page with `notifhook.js` as its `src`:

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

You might be tempted to just use `notifhook.js` as your content script, but that won't work because the content script and the web page have separate execution environments. Overwriting the content script's version of `webkitNotifications.createNotification` won't affect the Google Calendar page at all. Thus, you need to inject it via `<script>` tag, which will affect both the page and the content script.

Problem

Is there a way for an extension to add a listener to browser notifications, and access it content? I'm trying to use Google Calendar's notifications to fire a custom function.

Original source

Related problems