Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как определить загружен ли iframe (https://javascript.ru/forum/misc/5621-kak-opredelit-zagruzhen-li-iframe.html)

Goa 27.10.2009 14:46

Как определить загружен ли iframe
 
Господа! Может кто-нить знает как определить загружен iframe или нет.
Желательно бы кроссбраузерно. В IE можно определять по ifr.contentWindow.document.body, а в остальных я определял ifr.contentDocument && ifr.contentDocument.URL=="about:blank" (то есть еще не загружен). Но толи обновился firefox и перестал работать метод в нем.
Хочется чего то более корректного.

Octane 27.10.2009 14:48

У элемента iframe есть событие onload.

Goa 27.10.2009 14:56

Дело в том, что если вешать на onload обработчик, то он срабатывает только тогда когда он вешается на еще не загруженный ифрейм. А мне надо определить загружен ифрейм и если нет - вешать обработчик на onload, а если да то просто выполнить его.

Goa 29.10.2009 22:33

Итак, проблему я исследовал. И пришел к ряду выводов:
- В IE проблема решается проверкай ifr.contentWindow.document.body
- В правильных браузерах можно рассмотреть три ситуации:
1. Заведомо известно, что в ифрейме есть содержимое. В таком случае можно делать проверку любого свойства, завязанном на содержимом(innerHTML, textContent, innerText, childNodes, firstChild и т. д.)
2. Известен URL ифрейма. В этом случае: ifr.contentDocument.URL!="about:blank"
3. Если же ифрейм создается динамически и URL не указан, в таком случае определить загрузился ли ифрейм нельзя.

Kolyaj 30.10.2009 11:17

Цитата:

Сообщение от Goa
- В IE проблема решается проверкай ifr.contentWindow.document.body

Это значит только, что загрузился, как минимум, открывающий тег body, а не вся страница.

Goa 30.10.2009 14:20

Интересно))
Проверял? Дело в том, что у меня это работает. А более глубокий анализ я не делал.

Kolyaj 30.10.2009 14:26

А самому проверить?
<html>
<body>
<script type="text/javascript">alert(document.body);</script>
Еще много-много html-кода.
</body>
</html>

IIIEPJIOK 30.10.2009 15:01

Что-то я не понимаю.......ничего O_o
1. Если в в документе задан iframe с определенным src, то событие онЛоад головного документа, сработает после загрузки иФрейма.
2. Если src iframe'а задается динамически, после загрузки головного документа, то, что мешает повесить обработчик на iframe.onload

ЗЫ В ИЕ у документа, есть отличное свойство - readyState, в отличии от "правильных браузеров"

_________________ 02.11.2009 05:23

Если используете в проекте jQuery, то там легко вставить обработчик.
$("#id_фрейма").load(function(){....});
У меня работает четко и под IE 6, и под Opera 10. Один лишний раз событие всплывает - при создании фрейма, но с этим легко расправиться. Далее накладок не наблюдается.
Вот пример: gnezdo.wen.su/map/map.htm
(точнее, с ифреймом эта страничка будет завтра. Разберусь только, как клик отловить на содержимом фрейма, и обновлю)


Часовой пояс GMT +3, время: 14:57.