【问题标题】:Access iframe elements via jquery/javascript通过 jquery/javascript 访问 iframe 元素
【发布时间】:2013-12-07 19:14:40
【问题描述】:

好的,我需要做的很简单:

  • 我在 iFrame 中运行了一个网页(在本地的同一个文件夹中 - 它永远不会从服务器运行,仅此而已)
  • 我想从初始页面通过 javascript 访问它的元素。
  • 当通过 Chrome javascript 控制台尝试 $('iframe').contents() 之类的操作时,我收到了关于同源等的警告。

有什么想法吗?这应该很容易......


附:我对不包含 iframe 的解决方法不感兴趣 - 它 必须iframe...

【问题讨论】:

  • @Vegard 好吧,你试过了吗?
  • 在使用file:/// 协议时,使用Javascript 访问iframes(或任何其他资源)充满了困难。这是出于良好的安全原因。最简单的解决方案是运行本地 Web 服务器。
  • 每个文件都被视为每个自己的域。不起作用。见stackoverflow.com/questions/12587731/…
  • @MartinHansen 和 @lonesomeday:仅当 Op 使用 file: 协议时。如果使用http,那么应该没有问题。

标签: javascript jquery html iframe


【解决方案1】:

(1)

这是因为您在 iframe 中加载的网站与托管 iframe 本身的网站位于不同的域中。

看到这个:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Same_origin_policy_for_JavaScript

因此,同源策略将禁止 Javascript 访问/操作 iframe 内的页面。

(2)

还有一个 HTML5 沙盒的概念,这个属性可以对内联框架中出现的内容进行额外的限制。标记是:allow-same-origin、allow-scripts 等。

更多信息:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

请检查您的 iframe 是否被沙盒化?

(3)

然后,有X-Frame-Options HTTP 响应标头,可用于指示是否应允许浏览器在 iframe 中呈现页面。网站可以使用它来避免点击劫持攻击,方法是确保其内容不会嵌入到其他网站中。它看起来像这样:

<meta http-equiv="X-FRAME-Options" content="SAMEORIGIN">

此处的标记可以是:deny、sameorigin 或 allow-from。

更多信息:https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options

还有:https://www.rfc-editor.org/rfc/rfc7034

请检查您的页面是否有这样的标题?

(最后):

如果以上所有内容都不适用于您的方案,那么一切都应该正常。请发布更多信息,例如标记和您的 javascript。

【讨论】:

  • 好吧,我认为您没有阅读我最初的问题。我所拥有的只是假设 2 个文件:index.htmlindex2.html 位于同一个(本地)文件夹中。 index2.html 在 iframe 内运行。那么,有什么不同的域?
  • @Dr.Kameleon:好吧,我看错了,我以为你的网站是本地的。
  • 然而,谜团依然存在:为什么 chrome 会抱怨尝试跨域访问?
  • @Dr.Kameleon:我只是重新检查了一下。它只适用于我的组合,应该如此!
  • 什么操作系统/浏览器组合?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多