[英]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.