我正在制作一个扩展,在加载每个页面时都会专门为该页面创建我的 xpcom 组件的实例。
我这样做:
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));
}
我的问题是,在 XPCOM 组件中,如何在该文档的全局上下文中使用 eval() 。如果您只是在 html 中的常规 javascript 中执行此操作,您可以执行以下操作:
window.eval.call(window, somecode);
问题是我的 xpcom 组件中没有窗口变量(或者我没有),我只有对文档的引用。我也可以在创建时将窗口传递给我的 XPCOM 组件,但是如果我打开了几个页面,我看不出它是如何工作的。