2

我做了一个小的(引导的)扩展来通知我网站上的一些变化。一切都已完成,除了显示通知。

据我了解,无法从扩展访问 HTML5 通知。

然后我用 PopupNotifications.jsm 找到了另一种方法。但是常见的用法示例不起作用,因为"gBrowser is not defined"。此变量用于创建通知。

我不想使用任何外部扩展来处理通知(我发现至少有两个)。我需要一个独立的扩展。

还有另一种方法 - 使用 sdk。但我还没有准备好将它仅用于通知。我想尽可能简单地做我的扩展。

我在这里找到的示例:https ://developer.mozilla.org/en-US/docs/Using_popup_notifications

好的,现在的问题是:以最少的更改将通知添加到我的扩展程序的最佳方法是什么?继续 PopupNotifications.jsm?或者尝试创建nsIDOMDesktopNotification 的实例(但我不知道合适的类名,例如'@mozilla.org/...')。你能给我什么建议?

4

1 回答 1

0

您可以使用警报服务或从以下位置手动创建它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;
    }
}
于 2016-01-04T08:33:13.053 回答