我发现了许多相关的问题,但没有一个对我有用的解决方案,如果这是一个骗子,就此道歉。
我具有以下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++) {
...
}
m
是document.getElementsByTagName('iframe').length
的地方。但是在我的情况下,它的值为1
,因此我无法访问嵌套的iframe。
答案 0 :(得分:0)
您使用<iframe>
标签绝对错误!您想阅读 <iframe>
tag 中的文档:
允许的内容:后备内容,即通常不呈现但不支持
<iframe>
元素的浏览器将呈现的内容。
换句话说,如果浏览器不支持<iframe>
元素,则将呈现</iframe>
和<iframe>
标签之间的内容。
您可以使用两种<iframe>
标签:
src
标签的<iframe>
属性中,您可以编写HTML文件的路径。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(请参见上文)。