2012-06-15 292 views
4

我有一个看起来像这样的iframe:如何在JavaScript中获取此子元素的html元素?

<iframe id="iframe2" ...> 
    #document 
     <html>...</html> 
</iframe> 

我试图与html标签来获取iframe下面的项目。
在JavaScript中,当我这样做:

document.getElementByID("iframe2") 

这个返回正确的iframe中。

然而,当我这样做:

document.getElementByID("iframe2").childNodes 

回报是[]

document.getElementByID("iframe2").getElementsByTagName("#document")document.getElementByID("iframe2").getElementsByTagName("html")也返回[]

如何访问html标签?
另外,#document标签叫什么?

+0

http://stackoverflow.com/questions/926916/how-to-get-body-content-of-iframe-by-javascript – kapa

+0

的可能重复听起来非常像这样: 的http:// stackoverflow.com/questions/1088544/javascript-get-element-from-within-an-iframe –

+0

有什么问题。什么是#文档准确?这不只是一个文本?将文本与html标签混合可以导致将整个内容视为文本节点。 –

回答

5
document.getElementByID("iframe2").contentWindow.document 

或者,变体不被旧的IE浏览器的支持,

document.getElementByID("iframe2").contentDocument 

这将让你嵌入网页的document对象,并从那么您可以使用.documentElement,.body.head属性来获取html/body/head DOM。

如果要嵌入页面的window对象,请使用contentWindow而不是contentDocument

MDN有一个iframe scripting指南,您可能会发现有帮助。

+0

当我尝试其中任何一种时,我会得到“null”或“undefined”。我还收到了“不安全的JavaScript尝试访问框架”错误 –

+4

这意味着该框架是跨域的。出于安全原因,您无法访问具有跨域来源的iframe。 (想象一下,如果Web上的任何页面只能打开Gmail收件箱并通过页面的DOM进行搜索 - 这是一场安全灾难。) – apsillers

+0

是的,这是它。该框架是跨域的。谢谢! –

2

请试试这个代码:

var a=document.getElementById("iframe2").firstChild; 
+0

退货是“未定义” –

+0

@DiZou向我们展示完整的HTML请 – alfasin

0

试试这个:

var a = document.getElementById("iframe2").getElementsByTagName("*")[0]; 
0

的IFrame的内容的URL是否有相同的域父页面?如果不是,由于同源策略,您将无法访问IFrame内的任何内容。