繁体   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