Je crée une extension qui, au chargement de chaque page, crée une instance de mon composant xpcom spécifiquement pour cette page.en utilisant eval.call() dans le composant XPCOM de firefox
Je le fais comme ceci:
var appcontent = document.getElementById("appcontent"); // browser
if(appcontent) {
appcontent.addEventListener("load", onPageLoad, true);
}
var onPageLoad = function(aEvent) {
var doc = aEvent.originalTarget; //this is the reference to the opened page
pages.push(createInstanceOfMyXPCOM(doc));
}
Ma question est, dans le composant XPCOM, comment puis-je utiliser eval() dans le contexte global de ce doc. Si vous voulez simplement faire un javascript régulier en html, vous pouvez faire:
window.eval.call(window, somecode);
Le problème est que je n'ai pas variable fenêtre dans mon composant XPCOM (ou dois-je), je ne dispose que la référence à la document. Je pourrais passer la fenêtre à mon composant XPCOM lors de la création, mais si j'ai plusieurs pages ouvertes, je ne vois pas comment cela fonctionnerait.
Je pensais que je pouvais localement avoir var window = doc.defaultView. Mais doc.defaultView.eval n'est pas défini pour une raison quelconque, même si je peux le faire par exemple: doc.defaultView.content.document.defaultView.content.document.location.href. Il me manque quelque chose =) – Karolis