从Firefox扩展中设置页面窗口对象中的对象? [英] Set an object in a page's window object from a Firefox extension?
本文介绍了从Firefox扩展中设置页面窗口对象中的对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望我的Firefox扩展程序将一个对象添加到浏览页面的内容窗口中。我希望它和运行效果一样:
top.myobj = {val:3};
在页面的脚本元素中。
任何想法?
我不认为这里存在安全风险,因为我只添加一个整数属性的对象。有没有一种简单的方法从扩展代码中获取内容窗口对象?
解决方案
使用
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,$ b $ youreventhandler,true);
function youreventhandler(event){
if(event.originalTarget instanceof HTMLDocument){
var doc = event.originalTarget;
// doc =刚加载的窗口中的文档
var win = doc.defaultView;
//如果它只是一个框架元素,则返回并等待
//主事件触发。
if(win.frameElement)
return;
else {
win.myobj = {val:3};
//您的其他代码
code $ $ $ $ $ $ $ $I want my Firefox extension to add an object to the content window of the browsed page. I want it to have the same effect as running:
top.myobj = {val : 3};
inside a script element in the page.
Any ideas?
I don't think there is a security risk here as I only add an object with a single integer property. Is there a simple way to get the content window object from within the extension code?
解决方案 use
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
}
}
}
这篇关于从Firefox扩展中设置页面窗口对象中的对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文