XUL getNotificationBox - PullRequest
       2

XUL getNotificationBox

1 голос
/ 10 декабря 2010

Я разработал небольшой аддон для Firefox, в котором я сохраняю некоторые http прокси, так как много с ними работаю. Все прокси, после загрузки в ff, запрашивают имя пользователя и пароль во всплывающем окне. В моем аддоне сохранена эта информация, поэтому мне нужно найти способ задания значения полей ввода в этом окне уведомлений, которое отображается для аутентификации на прокси-сервере и избежать необходимости вручную вводить эти данные каждый раз, когда я меняю свой прокси.

Я должен признать, что я абсолютный новичок с XUL и javascript, а также. Я искал в Интернете и протестировал всевозможные фрагменты, но не могу получить содержимое уведомления, решить, нужно ли это, и ввести правильные значения.

У меня есть фрагмент кода, который, вероятно, приближается к тому, что я хочу, но, похоже, он не работает:

function getNotificationBox() {
        const Ci = Components.interfaces;

        function getChromeWindow(aWindow) {
                var chromeWin = aWindow
                .QueryInterface(Ci.nsIInterfaceRequestor)
                .getInterface(Ci.nsIWebNavigation)
                .QueryInterface(Ci.nsIDocShellTreeItem)
                .rootTreeItem
                .QueryInterface(Ci.nsIInterfaceRequestor)
                .getInterface(Ci.nsIDOMWindow)
                .QueryInterface(Ci.nsIDOMChromeWindow);
                return chromeWin;
        }

        var notifyWindow = window.top;

        var chromeWin = getChromeWindow(notifyWindow);

        var notifyBox = chromeWin.getNotificationBox(notifyWindow);

        return notifyBox;
}

function clickNotificationButton() {
        netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

        var box = getNotificationBox();
        var bar = box.getNotificationWithValue("is requesting a username and password");
        var button = bar.getElementsByTagName("button").item("OK");
        button.doCommand();
}

window.addEventListener("DOMNodeInserted", function(e) { clickNotificationButton;
}, false);

Кусок строки, который вы видите там "запрашивает имя пользователя и пароль", является частью текста, который отображается в окне уведомлений. Может кто-то заметит, если я здесь что-то не так делаю?

Любая помощь очень ценится. Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

Из вашего описания кажется, что диалог, который вы пытаетесь перехватить, на самом деле является диалогом аутентификации, а не панелью уведомлений (которая появляется после того, как пароль введен для подтверждения того, хотите ли вы сохранить / изменить его).Другими словами, звучит так, как будто вы хотите исправить ошибку Mozilla 223636 (https://bugzilla.mozilla.org/show_bug.cgi?id=223636). Бета-версии Firefox 4 на самом деле уже имеют исправление именно для этого случая (https://bugzilla.mozilla.org/show_bug.cgi?id=521467),, но по умолчанию оно отключено (требуется изменить скрытый преф, используя about: config).

Код, который вы вставили, к сожалению, для этого не очень полезен. Чтобы отлавливать диалоги аутентификации из расширения в текущих версиях, вам, вероятно, понадобится комбинация кода, которая соблюдает "общий диалог".загруженная тема и логика обработки диалога из http://mxr.mozilla.org/mozilla-central/source/toolkit/components/passwordmgr/test/prompt_common.js. Я могу предоставить более подробную информацию, если вы найдете меня на irc.mozilla.org/#extdev.

0 голосов
/ 10 декабря 2010

Правильно ли вы получаете окно уведомлений?Вы можете упростить функцию getChromeWindow до:

function getChromeWindow(aWindow) {
    var chromeWin = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
                           .getInterface(Ci.nsIWebNavigation)
                           .QueryInterface(Ci.nsIDocShell)
                           .chromeEventHandler.ownerDocument.defaultView;
    return chromeWin;
}

(http://mxr.mozilla.org/mozilla-central/source/toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js#1208)

. Вам также может понадобиться объект .wrappedJSObject для переменной chromeWin.

(http://mxr.mozilla.org/mozilla-central/source/toolkit/components/passwordmgr/src/nsLoginManagerPrompter.js#1295)

...