Définir un objet dans l'objet de fenêtre d'une page à partir d'une extension Firefox?

Je veux que mon extension Firefox ajoute un objet à la fenêtre de contenu de la page parcourue. Je veux qu'il ait le même effet que l'exécution:

top.myobj = {val : 3}; 

Dans un élément de script dans la page.

Des idées?

Je ne pense pas qu'il y ait un risque de sécurité ici car je n'ajoute qu'un objet avec une seule propriété entière. Existe-t-il un moyen simple d'obtenir l'objet de fenêtre de contenu à partir du code d'extension?

utilisation

 var mainWindow = window .QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIWebNavigation) .QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem .QueryInterface(Components.interfaces.nsIInterfaceRequestor) .getInterface(Components.interfaces.nsIDOMWindow); mainWindow.getBrowser().addEventListener("DOMContentLoaded", youreventhandler, true); function youreventhandler(event) { if (event.originalTarget instanceof HTMLDocument) { var doc = event.originalTarget; //doc = the document in the just loaded window var win = doc.defaultView; // if it's just a frame element, then return and wait for the // main event to fire. if (win.frameElement) return; else { win.myobj = { val: 3}; //your other code here } } } 

Vous devez utiliser evalInSandbox pour exécuter l'affectation dans le contexte de window.content manière similaire à ce code :

 // |content| refers to the current tab's |window| object var s = new Components.utils.Sandbox(content); s.window = content; Components.utils.evalInSandbox( "window.wrappedJSObject.test = function() { } ", s) 

BTW, re "Je ne pense pas qu'il existe un risque de sécurité ici" – l'ajout d'une propriété à un objet peut entraîner l'exécution du code (puisque JS a des configurateurs), il est donc nécessaire de toucher le contenu toujours dangereux. L'exemple ci-dessus ne touche que l'objet non sécurisé ( content.wrappedJSObject ) dans un bac à sable sans autorisation chrome, donc c'est OK.

Est-ce qu'il faut que ce soit la fenêtre, ou peut-il être le document lui-même? Vous pouvez toujours utiliser le document content.document la page elle-même. Ou window.content pour la fenêtre de contenu principal.