Alerts and Notifications

Basic modal alert

alert.png

alert('hello');

Pop-ups

notify.png

The following code presents a non-modal pop-up, which automatically disappears after an appropriate delay. It uses nsIAlertsService. This works on Windows, Linux and (if Growl is installed) Mac OS X:

function popup(title, text) {
  try {
    Components.classes['@mozilla.org/alerts-service;1']
              .getService(Components.interfaces.nsIAlertsService)
              .showAlertNotification(null, title, text, false, '', null);
  } catch(e) {
    // prevents runtime error on platforms that don't implement nsIAlertsService
  }
}

If you need to display a comparable alert on a platform that doesn't support nsIAlertsService, you can do this:

function popup(title, msg) {
  var image = null;
  var win = Components.classes['@mozilla.org/embedcomp/window-watcher;1']
                      .getService(Components.interfaces.nsIWindowWatcher)
                      .openWindow(null, 'chrome://global/content/alerts/alert.xul',
                                  '_blank', 'chrome,titlebar=no,popup=yes', null);
  win.arguments = [image, title, msg, false, ''];
}

Using notification box

Another way of non-modal notification and further interaction with users is using of XUL elements notificationbox and notification (implicitly). However it is possible to use only buttons and a label there.

notificationbox2.png

var message = 'Another pop-up blocked';
var box = gBrowser.getNotificationBox();
var notification = box.getNotificationWithValue('popup-blocked');
if (notification) {
    notification.label = message;
}
else {
    var buttons = [{
        label: 'Button',
        accessKey: 'B',
        popup: 'blockedPopupOptions',
        callback: null
    }];

    let priority = box.PRIORITY_WARNING_MEDIUM;
    box.appendNotification(message, 'popup-blocked',
                           'chrome://browser/skin/Info.png',
                            priority, buttons);
}