有没有办法在 javascript 控制台中将上下文更改为 iframe?

我想更改在 webkit 开发人员工具/Firebug 控制台中执行的 javascript 的上下文,以便像在页面上的 iframe 中运行一样执行其代码。

我知道我可以通过在一个单独的页面上打开 iframe 中的页面来实现这一点,但是我希望在它与父框架交互的地方运行代码。

70887 次浏览

可以使用 window.frames[x]功能执行 <iframe>中的代码,

window.frames[0].runFunction()

Chrome15允许你改变控制台的范围。在控制台的底部,在透明控制台按钮的旁边,有一个菜单,上面写着 <top frame>,它将提供一个可用帧的列表:

enter image description here

Firefox has a 相似的特征 currently in development:

enter image description here


你也可以浏览框架 使用命令行:

var frame = document.getElementById("frame1").contentWindow;
cd(frame);

有关 Firebug 解决方案,请参阅 这个答案的另一个 SO 问题。不像丹尼斯的 Chrome 解决方案那样跨域工作。

编辑: 与新版本的 Firebug,他们可能有固定的跨域问题。

Execution of script statements and commands by default is done in context of the top-level window. If you are using frames, use the "cd()" console command.

Cd () 不带参数调用 cd ()将返回到顶级窗口。

Cd (窗口) Allows you to change command-line expression evaluation from the default top-level window of the webpage to the window of a frame.

更多信息,给你

cd(document.getElementsByTagName('iframe')[0]);

在今天的 Chrome (版本52)中,您所要做的就是在 dev 工具的“ Elements”选项卡中选择 iframe。在 JS 控制台中运行的任何内容都将自动在选定的 iframe 上下文中运行。

例如,这里我选择了一个 iframe,当我在控制台中输入 document.location.pathname时,它返回 iframe 的 src 属性,而不是地址栏中的 URL:

enter image description here

对于使用 Firefox 的用户,cd()不起作用。

相反,一种可能的解决方案是在 iframe 的 contentWindow 上调用 eval () ,在 iframe 的上下文中运行 javascript。

var frame = document.getElementById("MyIframe").contentWindow;
frame.eval("alert(1);");