在 Firefox XPCOM 组件中使用 eval.call()
我正在制作一个扩展,在加载每个页面时都会专门为该页面创建 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 组件中没有 window 变量(或者我有),我只有对文档的引用。我也可以在创建时将窗口传递给我的 XPCOM 组件,但如果我打开了多个页面,我不知道这是如何工作的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从 XPCOM 中,您应该能够使用以下方法获取主窗口的引用:
然后您可以使用以下方法获取当前选定的选项卡文档:
您可以在此处找到更多信息:
https://developer.mozilla.org/en/Code_snippets/Tabbed_browser
https://developer.mozilla.org/en/Working_with_windows_in_chrome_code
更新:
试试这个,您应该能够获得最新版本的参考窗口:
如果您有多个选项卡,则可以使用类似的内容(来自 Mozilla 开发站点的代码)来迭代所有选项卡并访问每个文档:
}
From the XPCOM you should be able to get a reference to the main window using:
Then you can get the currently selected tab document with:
You can fin more information here:
https://developer.mozilla.org/en/Code_snippets/Tabbed_browser
https://developer.mozilla.org/en/Working_with_windows_in_chrome_code
UPDATE:
Try this one, you should be able to get a reference to the most recent window:
If you have multiple tabs, you use something like this (code from Mozilla Dev Site) to iterate over all of them and access each document:
}