从Firefox扩展中设置页面窗口对象中的对象? [英] Set an object in a page's window object from a Firefox extension?

查看:94
本文介绍了从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆