【问题标题】:Is there a way to change context to iframe in javascript console?有没有办法在javascript控制台中将上下文更改为iframe?
【发布时间】:2011-12-19 03:51:16
【问题描述】:

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

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

【问题讨论】:

  • 您始终可以以window.frames[x] 方式执行代码。只需附加您想要的任何命令。 IE。 window.frames[0].runFunction()
  • @Ktash,你愿意回答吗?
  • 如何在 IE 中做同样的事情?如果元素位于内部 IFRAME 中,我发现使用 $ 在控制台窗口中选择元素非常困难。请帮忙。

标签: javascript iframe console firebug


【解决方案1】:

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

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


您还可以跨帧导航using the command line

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

【讨论】:

  • 我可以在控制台中执行代码来完成同样的事情,还是我必须点击框架选择器?
  • @bodine - 你找到了通过控制台命令完成它的方法吗?
  • 请注意,此下拉菜单现在位于控制台顶部,而不是底部。
  • 我在 Chrome 38 中看不到这一点。无法快速弄清楚如何在 Chrome 中执行此操作;在 Firefox 中使用 cd(frames[]) 代替。
  • 真可惜。如果框架的内容发生更改,它将不会保留选定的框架。它切换回“顶部框架”
【解决方案2】:

您可以使用window.frames[x] 功能在<iframe>s 中执行代码。例如,

window.frames[0].runFunction()

【讨论】:

  • 如果 FireBug 是您的首选武器,这是一个不错的选择。谢谢。
  • 您将如何在 jQuery 命令等函数之外执行代码?或者,如果您想在某个框架下获取对 DOM 元素的引用,然后针对该元素执行代码?
  • 例如:window.frames[0].alert()
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    对于萤火虫解决方案,请参阅 this answer 另一个 SO 问题。但是,它不像 Dennis 的 Chrome 解决方案那样跨域工作。

    编辑:对于较新版本的 firebug,他们可能已经修复了跨域问题。

    【讨论】:

      【解决方案5】:

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

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

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

      更多信息,here

      【讨论】:

      • 这正是我想要的。 (它适用于 Firefox)谢谢。
      【解决方案6】:
      cd(document.getElementsByTagName('iframe')[0]);
      

      【讨论】:

      • 欢迎来到 Stack Overflow!请考虑编辑您的帖子,以添加更多关于您的代码的作用以及它为什么会解决问题的解释。一个大部分只包含代码的答案(即使它正在工作)通常不会帮助 OP 理解他们的问题。
      • 谢谢! Firefox 这样做是一种奇怪的方式,但我猜“cd(iframe)”是您在控制台中输入的内容以切换上下文。我给了你一个 +1 b/c 你省了我很多麻烦,但你真的应该完善这篇文章并解释它!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多