在我的代码中,我有一行转储当前窗口(恰好是youtube视频页面):
Firebug.Console.log(myWindow);
可以看出window对象包含“yt”属性,这是另一个可以在调试器中轻松检查的对象:
不幸的是,打电话
Firebug.Console.log(myWindow.yt);
记录“未定义” - 为什么会这样,以及如何访问此“yt”属性?
编辑:一个可能很重要的附加:我正在编写的代码是firefox扩展的一部分,所以它不是真正在一个pgae中运行,但在chrome中 - 我开始认为它可能是原因。可以将Chrome脚本限制在他们可以看到/访问的内容而不是脚本标记中的代码吗?
答案 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()
。