【问题标题】:Change the context of the Safari 6 console to an iframe on the page将 Safari 6 控制台的上下文更改为页面上的 iframe
【发布时间】:2013-02-19 16:41:52
【问题描述】:

我知道Chrome 让您使用下拉菜单选择控制台执行的上下文,而 Firebug 让您将cd() 放入 iframe。我不知道如何更改 Safari 控制台中的上下文。有谁知道如何做到这一点?

【问题讨论】:

    标签: javascript safari console web-inspector


    【解决方案1】:

    Safari 与 chrome 和 firefox 不同,没有真正支持此功能,唯一的选择似乎是从控制台访问窗口对象。正如您正确指出的那样,这将触发跨域策略问题,但是如果您在 mac 上运行(这在 Windows 上由于某种原因不起作用),您可以使用

    open -a '/Applications/Safari.app' --args --disable-web-security
    

    绕过这个。接下来在你的 jsbin 上,你可以使用类似

    的东西
    window.frames[0]
    

    访问页面的窗口。据我所知,windows没有类似的解决方案,因为

    Safari.exe --disable-web-security
    

    显然不起作用。

    【讨论】:

      【解决方案2】:

      Iframe 元素本身在控制台中属于 Window 类型

      <iframe id="frame" src="about:blank"/>
      

      在 Safari 控制台中,您只需使用

      frame.document.write('bla');
      

      请注意“frame”是document.getElementById('frame')的简写

      【讨论】:

      • 不幸的是,它不适用于域与主机页面不同的 iframe。这就是为什么 firebug cd 命令和用于更改“上下文”的 Chrome 下拉菜单如此有用...
      • 确定吗?我用不同的 URL 尝试了这个,它奏效了。仅用于发布我将其更改为 about:blank。
      • 是的:jsbin.com/ojiley/2 -- 当我打开 Safari 控制台并输入:document.getElementById("test-iframe").document 我得到undefinedcl.ly/image/0N0v1l223w1m
      • 试试document.getElementById("test-iframe").contentDocumentdocument.getElementById("test-iframe").contentWindow。此外,您可以将框架的所有部分打印到控制台:for(var key in document.getElementById("test-iframe")) console.log(key);以便找到所有有用的属性。
      • 不,我仍然无法访问 iframe 中的任何内容。你确定你使用的是 Safari 6.x?
      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 2015-06-24
      • 2011-11-24
      • 1970-01-01
      相关资源
      最近更新 更多