簡體   English   中英

XUL getNotificationBox

[英]XUL getNotificationBox

我已經為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);

您在其中看到的“正在請求用戶名和密碼”字符串是通知窗口中顯示的文本的一部分。 如果我在這里做錯了什么,可以發現嗎?

任何幫助深表感謝。 謝謝!

您是否正確收到通知框? 您可以將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)

從您的描述中,聽起來您要攔截的對話框實際上是身份驗證對話框,而不是通知欄(在輸入密碼以確認是否要保存/更改后,它會出現)。 換句話說,聽起來您想修復Mozilla錯誤223636(https://bugzilla.mozilla.org/show_bug.cgi?id=223636)。 Firefox 4 beta實際上已經針對這種情況進行了修復(https://bugzilla.mozilla.org/show_bug.cgi?id=521467),但默認情況下已禁用(需要使用about:config更改隱藏的首選項)。

不幸的是,您粘貼的代碼將不會非常有用。 為了從當前發布版本的擴展中捕獲身份驗證對話框,您可能需要遵循“ common-dialog-loaded”主題的代碼與http://mxr.mozilla.org/mozilla-central/中的對話框處理邏輯的組合源/工具包/組件/密碼mgr / test / prompt_common.js 如果您在irc.mozilla.org/#extdev上找到我,可以提供更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM