在FireBug中可见的JavaScript对象,代码中无法访问

时间:2012-04-01 01:09:09

标签: javascript firefox-addon firebug

在我的代码中,我有一行转储当前窗口(恰好是youtube视频页面):

Firebug.Console.log(myWindow);

可以看出window对象包含“yt”属性,这是另一个可以在调试器中轻松检查的对象:

http://i.imgur.com/lHHns.png

不幸的是,打电话

 Firebug.Console.log(myWindow.yt);

记录“未定义” - 为什么会这样,以及如何访问此“yt”属性?

编辑:一个可能很重要的附加:我正在编写的代码是firefox扩展的一部分,所以它不是真正在一个pgae中运行,但在chrome中 - 我开始认为它可能是原因。可以将Chrome脚本限制在他们可以看到/访问的内容而不是脚本标记中的代码吗?

3 个答案:

答案 0 :(得分:2)

出于安全原因,Firefox扩展程序不会直接访问网页对象,而是通过wrapper。此包装器允许您使用DOM对象定义的所有属性,但页面JavaScript添加的任何内容都将不可见。你可以access the original object

Firebug.Console.log(XPCNativeWrapper.wrappedJSObject.yt);

但是,如果您想要从扩展程序与网页进行交互,您应该考虑网页无法对您进行欺骗的替代方案(例如,在内容窗口中运行非特权代码:myWindow.location.href = "javascript:...")。

答案 1 :(得分:0)

出于安全原因,Firefox和Chrome扩展程序无法访问页面中的JavaScript。

答案 2 :(得分:0)

我看到使用异步API这样的混乱。

console.log(obj);显示所有对象的内容,但是当在代码中访问对象属性时,由于调用是异步的,它们实际上还没有填充。

为什么Chrome和Firefox显示它们全部填写可能只是一个时间问题,因为它们可能也异步处理console.log()