Расширение Firefox: о PopupNotifications.jsm в

Я сделал небольшое (загрузочное) расширение, чтобы уведомлять меня о некоторых изменениях на сайте. Все сделано, кроме отображения уведомлений.

Как я понимаю, HTML5 Notification недоступен из расширений.

Тогда я нашел другой путь с PopupNotifications.jsm. Но общий пример использования не работает, потому что "gBrowser не определен". Эта переменная используется для создания уведомления.

Я не хочу использовать какие-либо внешние расширения для работы с уведомлениями (я нашел по крайней мере два). Мне нужно отдельное расширение.

Есть еще один способ - использование SDK. Но я не готов использовать его только для уведомлений. Я хочу сделать свое расширение максимально простым.

Пример, который я нашел здесь: https://developer.mozilla.org/en-US/docs/Using_popup_notifications

Хорошо, теперь вопрос: как лучше всего добавить уведомления в мое расширение с минимальными изменениями? Продолжить с PopupNotifications.jsm? Или попробуйте создать экземпляр nsIDOMDesktopNotification (но я не знаю подходящего имени класса, например '@mozilla.org/...'). Что вы можете мне предложить?

1 ответ

Вы можете использовать службу оповещения или создать ее вручную из chrome://global/content/alerts/alert.xul:

function notify(title, msg, url, img, name, isClickable) {

    var listener = {
        observe: function(subject, topic, data) { // jshint ignore:line
            // if (topic === 'alertclickcallback') {
            // }

            // if (topic === 'alertfinished') {
            // }
        },
    };

    try {
        var alertWin = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService);
        alertWin.showAlertNotification(img, title, msg, isClickable, url, listener, name);
    }
    catch (e) {
        // fix for when alerts-service is not available (e.g. SUSE)
        var ALERT_XUL = 'chrome://global/content/alerts/alert.xul';
        var FF_WIN_OPTS = 'chrome,dialog=yes,titlebar=no,popup=yes';

        // arguments[0] --> the image src url
        // arguments[1] --> the alert title
        // arguments[2] --> the alert text
        // arguments[3] --> is the text clickable?
        // arguments[4] --> the alert cookie to be passed back to the listener
        // arguments[5] --> the alert origin reported by the look and feel
        // 0: bottom right.
        // 2: bottom left
        // 4: top right
        // 6: top left
        // arguments[6] --> bidi
        // arguments[7] --> lang
        // arguments[8] --> replaced alert window (nsIDOMWindow)
        // // i. e. previous alert
        // arguments[9] --> an optional callback listener (nsIObserver)
        // arguments[10] -> the nsIURI.hostPort of the origin, optional
        var winArgs = [img, title, msg, isClickable, url, 2, null, null, null, listener, name];

        // aParentwindow, aUrl, aWindowName, aWindowFeatures, aWindowArguments (nsISupports)
        var win = Services.ww.openWindow(null, ALERT_XUL, '_blank', FF_WIN_OPTS, null);
        win.arguments = winArgs;
    }
}
Другие вопросы по тегам