Как получить все вложенные iframes в документе? - PullRequest
0 голосов
/ 08 ноября 2018

Я нашел много связанных вопросов, но ни у одного из них не было решения, которое помогло бы мне, поэтому извиняюсь, если это обман.

У меня есть следующая структура 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, и поэтому я не смог получить доступ к вложенным фреймам.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы используете тег <iframe> абсолютно неправильно! Вы хотите прочитать документацию по тегу <iframe> :

Разрешенное содержимое: Резервное содержимое, то есть содержимое, которое обычно не отображается, но браузеры, не поддерживающие элемент <iframe>, будут отображаться.

Другими словами, содержимое между тегами <iframe> и </iframe> будет отображаться, если браузер не поддерживает элемент <iframe>.

У вас есть две возможности использовать тег <iframe>:

  1. В атрибуте src из тега <iframe> вы можете указать путь к файлу HTML.
  2. В атрибуте src из тега <iframe> вы можете написать "about:blank", а затем, используя JS, вы можете добавить содержимое к этому <iframe>.

Если вы хотите найти некоторые элементы или манипулировать контентом из этих фреймов, вы можете использовать следующий код:

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

Вы должны быть уверены, что у вас есть доступ к вашему <iframe>.
Пожалуйста, прочитайте Совместный обмен ресурсами (CORS) статью об этом.

Если вы хотите получить счетчик всех вложенных элементов iframe в документе, вы должны найти его для каждого <iframe> отдельно и добавить этот счетчик в свою глобальную переменную счетчика iframe. И не забывайте про CORS (см. Выше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...