【发布时间】:2010-07-20 22:17:16
【问题描述】:
我正在制作一个扩展,在加载每个页面时都会为该页面创建一个我的 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 组件,但是如果我打开了几个页面,我看不出它是如何工作的..
【问题讨论】:
-
我以为我可以在本地拥有 var window = doc.defaultView。但是由于某种原因 doc.defaultView.eval 是未定义的,即使我可以这样做,例如:doc.defaultView.content.document.defaultView.content.document.location.href。我错过了一些东西=)
标签: javascript firefox xpcom