J'ai développé un petit addon pour Firefox dans lequel j'économise des proxies http car je travaille beaucoup avec eux. Tous les proxys, une fois chargés dans ff, demandent un nom d'utilisateur et un mot de passe dans une fenêtre contextuelle. Mon addon a cette information sauvegardée donc je dois trouver un moyen de définir la valeur des champs d'entrée dans cette boîte de notification qui est affichée afin de s'authentifier auprès du serveur proxy et éviter d'avoir à entrer manuellement ces détails chaque fois que je change Procuration.XUL getNotificationBox
Je dois avouer que je suis un débutant absolu avec XUL et javascript. J'ai cherché sur le Web et testé toutes sortes d'extraits mais je ne peux pas obtenir le contenu de la notification, décider si c'est ce que je cherche et entrer les bonnes valeurs.
J'ai un morceau de code qui obtient probablement près de ce que je veux, mais il ne semble pas fonctionner:
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);
Le morceau de ficelle que vous voyez là-bas « demande un nom d'utilisateur et mot de passe » est partie du texte affichée dans la fenêtre de notification. Quelqu'un peut-il repérer si je fais quelque chose de mal ici?
Toute aide est très appréciée. Merci!
Vous devez le .wrappedJSObject sur les versions de Firefox avant 4, car ils utilisent XPCNativeWrapper qui enveloppe toujours des propriétés des objets retournés emballés, mais Firefox 4 utilise XrayWrapper qui remarque que le chromeEventHandler est un objet chromé et donc ne dérange pas l'emballage il. – Neil