2011-11-01 97 views
89

我想更改在webkit开发人员工具/ firebug控制台中执行的JavaScript的上下文,以执行其代码,就像它从页面上的iframe中运行一样。有没有办法在javascript控制台中将上下文更改为iframe?

我知道我可以通过在单独的页面上打开iframe中的页面来做到这一点,但我想在与父框架交互的位置运行代码。

+1

你总是可以用'window.frames [x]'方式执行代码。只需追加任何你想要的命令。 I.E. 'window.frames [0] .runFunction()' – Ktash

+1

@Ktash,你可能想让这个答案? – Muhd

+0

我如何在IE中做同样的事情?如果元素位于内部IFRAME中,我发现使用$在控制台窗口中选择一个元素非常困难。请帮忙。 – tarekahf

回答

123

Chrome 15允许您更改控制台的范围。在控制台上,旁边的清除控制台按钮的底部,有一个菜单,上面写着<top frame>,这将给可用帧列表:

enter image description here

Firefox有一个similar feature目前正在开发中:

enter image description here


您也可以跨框架using the command line导航

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

非常好,甚至跨域的作品。正是我想要的。 – Muhd

+5

我可以在控制台中执行代码来完成同样的事情,还是必须单击帧选择器? – bodine

+0

@bodine - 你有没有找到一种方法从控制台命令中完成它? – arty

20

您可以使用window.frames[x]功能执行的代码。例如,

window.frames[0].runFunction() 
+0

如果FireBug是你选择的武器,一个不错的选择。谢谢。 –

+0

你会如何执行jQuery命令之类的函数之外的代码?或者,如果您想在某个框架下获取DOM元素的引用,那么针对该元素执行代码? – David

4

对于萤火虫解决方案,请参阅this answer关于另一个SO问题。但是,不像丹尼斯的Chrome解决方案那样可以跨域使用。

编辑:更新版本的萤火虫他们可能有固定的跨域问题。

3

默认情况下脚本语句和命令的执行是在顶层窗口的上下文中完成的。如果您使用的是帧,请使用“cd()”控制台命令。

cd() 不带参数调用cd()会返回到顶层窗口。

cd(窗口) 允许您将命令行表达式评估从网页的默认顶级窗口更改为框架的窗口。

更多信息,here

+1

似乎只与IE相关,但不适用于webkit .. – Cherniv

+0

这正是我所期待的。 (它适用于Firefox) 谢谢。 – user2410595

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

欢迎来到Stack Overflow!请考虑编辑您的帖子,以添加更多关于您的代码的解释以及为什么它可以解决问题。一个主要包含代码的答案(即使它正在工作)通常不会帮助OP了解他们的问题。 – SuperBiasedMan

+0

谢谢!对于firefox来说,这是一种奇怪的方式,但我想“cd(iframe)”是您在控制台中输入以切换上下文的内容。我给了你一个+1 b/c你为我节省了大量的头撞,但你应该真正抛光这个帖子并解释它! –

5

在今天的Chrome(52版),所有你需要做的是在开发者工具“元素”选项卡中选择iframe中。您在JS控制台中运行的任何内容都将自动运行在所选iframe的上下文中。

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

enter image description here

相关问题