如何在文档中获取所有嵌套的iframe?

时间:2018-11-08 11:36:46

标签: javascript html iframe

我发现了许多相关的问题,但没有一个对我有用的解决方案,如果这是一个骗子,就此道歉。

我具有以下HTML结构(简化):

<html>
<head>
</head>
<body style="">
    <div>
        <div>
            <div>
                <iframe>
                    <html>
                        <head></head>
                        <body>
                            <div></div>
                            <iframe>
                                <html>
                                    <head></head>
                                    <body>
                                        <div>
                                            <iframe src="about:blank">
                                                <html>
                                                    <head></head>
                                                    <body>
                                                        <img />
                                                        <iframe id="some_random_id">
                                                            <html>
                                                                <head></head>
                                                                <body>
                                                                    <div>
                                                                        <!-- main content -->
                                                                    </div>
                                                                </body>
                                                            </html>
                                                        </iframe>
                                                    </body>
                                                </html>
                                            </iframe>
                                        </div>
                                    </body>
                                </html>
                            </iframe>
                        </body>
                    </html>
                </iframe>
            </div>
        </div>
    </div>
</body>
</html>

我想检索所有iframe,最好是在数组中。 我尝试了以下方法:

document.getElementsByTagName('iframe')

但这会返回一个大小为1的数组:[iframe]

window.frames.length给我1

我考虑过做类似的事情:

var a = document.getElementsByTagName('iframe')[0]
var b = a.getElementsByTagName('iframe')[0] 
// b is undefined
var b = a.contentDocument.getElementsByTagName('iframe')[0]
// b is undefined

有什么方法可以检索页面上的所有iframe?另外,仅获取最后一个(id为some_random_id的那个)就可以了,但是由于html是由第三方创建的,因此我无法使用id进行选择。

编辑:我认为我的问题不是using document.getElementsByTagName on a page with iFrames - elements inside the iframe are not being picked up的重复项 因为此问题中接受的答案使用:

for( j=0; j<m; j++) {
    ...
} 

mdocument.getElementsByTagName('iframe').length的地方。但是在我的情况下,它的值为1,因此我无法访问嵌套的iframe。

1 个答案:

答案 0 :(得分:0)

您使用<iframe>标签绝对错误!您想阅读 <iframe> tag 中的文档:

  

允许的内容:后备内容,即通常不呈现但不支持<iframe>元素的浏览器将呈现的内容。

换句话说,如果浏览器不支持<iframe>元素,则将呈现</iframe><iframe>标签之间的内容。

您可以使用两种<iframe>标签:

  1. src标签的<iframe>属性中,您可以编写HTML文件的路径。
  2. src标记的<iframe>属性中,您可以编写"about:blank",然后使用JS将内容添加到此<iframe>中。

如果您想从此iframe中查找某些元素或操纵其内容,则可以使用以下代码:

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

您应确保可以访问<iframe>
请阅读有关其的 Cross-origin resource sharing (CORS) 文章。

如果要获取文档中所有嵌套iframe的计数,则必须分别为每个<iframe>找到它,并将此计数添加到全局iframe计数变量中。而且不要忘记CORS(请参见上文)。