Я нашел много связанных вопросов, но ни у одного из них не было решения, которое помогло бы мне, поэтому извиняюсь, если это обман.
У меня есть следующая структура 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>
И я хотел бы получить все iframes, в идеале, в массиве.
Я пробовал следующее:
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 на странице? В качестве альтернативы, просто получить последний (тот, что с идентификатором some_random_id
) будет работать нормально, но я не могу использовать идентификатор для его выбора, так как HTML создается третьей стороной.
Редактировать: Не думаю, что мой вопрос является дубликатом с использованием document.getElementsByTagName на странице с iFrames - элементы внутри iframe не собираются
потому что принятый ответ в этом вопросе используют:
for( j=0; j<m; j++) {
...
}
Где m
равно document.getElementsByTagName('iframe').length
. Но в моем случае оно будет иметь значение 1
, и поэтому я не смог получить доступ к вложенным фреймам.