javascript - 如何获取文档上的所有嵌套 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
)也可以,但我不能使用 id 来选择它,因为 html 是由第三方创建的。
编辑:我不认为我的问题与在带有 iFrame 的页面上使用 document.getElementsByTagName 重复 - iframe 内的元素没有被拾取, 因为此问题中接受的答案使用:
for( j=0; j<m; j++) {
...
}
m
在哪里document.getElementsByTagName('iframe').length
。但就我而言,它具有价值1
,因此我无法访问嵌套的 iframe。
解决方案
您使用的<iframe>
标签绝对错误!您想阅读来自<iframe>
tag的文档:
允许的内容:后备内容,即通常不呈现但不支持该
<iframe>
元素的浏览器将呈现的内容。
换句话说,如果浏览器不支持该元素,则将呈现<iframe>
和标签之间的内容。</iframe>
<iframe>
您有两种使用<iframe>
标签的可能性:
- 在标签的
src
属性中,<iframe>
您可以编写 HTML 文件的路径。 - 在标签的
src
属性中,<iframe>
您可以编写"about:blank"
然后使用 JS 将内容添加到 this<iframe>
中。
如果您想查找一些元素或操作此 iframe 中的内容,您可以使用以下代码:
var iframe = document.getElementById('iframeId'),
innerDoc = iframe.contentDocument ? iframe.contentDocument
: iframe.contentWindow.document;
您应该确保您可以访问您的<iframe>
.
请阅读有关它的跨域资源共享 (CORS)文章。
如果要获取文档上所有嵌套 iframe 的计数,则必须<iframe>
分别为每个嵌套 iframe 找到它,并将此计数添加到全局 iframe 计数变量中。不要忘记 CORS(见上文)。
推荐阅读
- python - “错误:算法输出超出最大可接受输出大小 16883260 > 15728640 字节”
- wso2 - WSO2, Data Source Error only with a subquery called from API
- sql-server - SQL Server:索引视图错误地验证基表中的插入
- python-3.x - 向用户发送文件,然后从服务器中删除文件
- elasticsearch - 检查某些桶值是否满足条件的 Elasticsearch 子聚合查询
- c# - 即使我的其他绑定更新,我的数据网格也不会更新
- python - AttributeError: 安装 django 时模块 'typing' 没有属性 'NoReturn'
- python - get_feature_names() 不适用于使用 sikit learn 的 CountVectorizer() 制作的稀疏矩阵
- r - 基于多个变量创建长格式数据框
- cassandra - Cassandra 使用 CQL 获取操作系统类型