从iFrame中获取元素


Answers:


382
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

您可以更简单地写:

var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

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

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

重要提示:请确保iframe位于同一域中,否则您将无法访问其内部。那将是跨站点脚本。


4
好答案。您知道您可以执行以下操作:var innerDoc = iframe.contentDocument || iframe.contentWindow.document; //更具可读性,并且含义相同
David Snabel-Caunt 09年

5
除了三元运算符,我还看到人们对此感到困惑。他们似乎不知道第一个有效的返回了。
geowa4,2009年

5
实际上,当我编辑包含它的答案时,那个在我肩膀上的家伙问我做了什么……
geowa4

12
为了简单起见,教育可能比使用更复杂的代码更好:)
David Snabel-Caunt 09年

1
@JellicleCat:可以通过任何方式进行“跨站点伪造”,也称为“一键式”攻击或“会话骑行”
CSharper 2013年

12

加载后,请不要忘记访问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>

3
window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value')

CallYourFunction() 是页面内的函数,并且该函数在页面上的作用


5
那就是从iFrame调用一个函数,而没有获得对该元素的引用。
尼克·米切尔

3

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

$('#iframeId').contents().find('div')

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

有关jQuery的进一步阅读.contents().contents()

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


1

没有其他答案对我有用。我最终在iframe中创建了一个函数,该函数返回我正在寻找的对象:

function getElementWithinIframe() {
    return document.getElementById('copy-sheet-form');
}

然后像这样调用该函数以检索元素:

var el = document.getElementById("iframeId").contentWindow.functionNameToCall();


-3

以下代码将帮助您找出iframe数据。

let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.