从iFrame中获取元素

joe*_*our 229 html javascript iframe

你是如何得到<div>一个<iframe>

geo*_*wa4 362

var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
Run Code Online (Sandbox Code Playgroud)

你可以更简单地写:

var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
Run Code Online (Sandbox Code Playgroud)

并将返回第一个有效的内部文档.

获得内部文档后,您可以像访问当前页面上的任何元素一样访问其内部.(innerDoc.getElementById......等)

重要信息:确保iframe位于同一个域中,否则您将无法访问其内部.这将是跨站点脚本.

  • 教育可能比使用更复杂的代码更简单:) (12认同)
  • 我看到人们比三元运营商更困惑.他们似乎不知道第一个有效的返回. (5认同)
  • 事实上,当我编辑包含它的答案时,我肩上的那个人问我这是做了什么...... (5认同)
  • 很好的答案.您知道吗?var innerDoc = iframe.contentDocument || iframe.contentWindow.document; //更具可读性,意味着相同 (4认同)
  • 如果 iframe 源自不同的 URL,是否有办法访问 iframe 内部。你提到它是跨站脚本,但我想知道是否有办法。 (4认同)

luk*_*yer 9

加载后不要忘记访问iframe .没有jQuery的旧但可靠的方法:

<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe>

<script>
function access() {
   var iframe = document.getElementById("iframe");
   var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
   console.log(innerDoc.body);
}
</script>
Run Code Online (Sandbox Code Playgroud)


小智 7

window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value')
Run Code Online (Sandbox Code Playgroud)

CallYourFunction()是页面内的函数以及该函数对其执行的操作

  • 这是从 iFrame 调用函数,而不是获取对该元素的引用。 (7认同)

Sku*_*aZZ 6

以上答案使用 JavaScript 给出了很好的解决方案。这是一个简单的jQuery解决方案:

$('#iframeId').contents().find('div')
Run Code Online (Sandbox Code Playgroud)

这里的技巧是jQuery的.contents()方法,不像.children()只能获取HTML元素,.contents()可以同时获取文本节点和HTML元素。这就是为什么可以通过使用 iframe 来获取文档内容的原因。

进一步阅读 jQuery .contents(): .contents()

请注意,iframe 和页面必须位于同一域中。