Как определить загружен ли iframe
Господа! Может кто-нить знает как определить загружен iframe или нет.
Желательно бы кроссбраузерно. В IE можно определять по ifr.contentWindow.document.body, а в остальных я определял ifr.contentDocument && ifr.contentDocument.URL=="about:blank" (то есть еще не загружен). Но толи обновился firefox и перестал работать метод в нем. Хочется чего то более корректного. |
У элемента iframe есть событие onload.
|
Дело в том, что если вешать на onload обработчик, то он срабатывает только тогда когда он вешается на еще не загруженный ифрейм. А мне надо определить загружен ифрейм и если нет - вешать обработчик на onload, а если да то просто выполнить его.
|
Итак, проблему я исследовал. И пришел к ряду выводов:
- В IE проблема решается проверкай ifr.contentWindow.document.body - В правильных браузерах можно рассмотреть три ситуации: 1. Заведомо известно, что в ифрейме есть содержимое. В таком случае можно делать проверку любого свойства, завязанном на содержимом(innerHTML, textContent, innerText, childNodes, firstChild и т. д.) 2. Известен URL ифрейма. В этом случае: ifr.contentDocument.URL!="about:blank" 3. Если же ифрейм создается динамически и URL не указан, в таком случае определить загрузился ли ифрейм нельзя. |
Цитата:
|
Интересно))
Проверял? Дело в том, что у меня это работает. А более глубокий анализ я не делал. |
А самому проверить?
<html> <body> <script type="text/javascript">alert(document.body);</script> Еще много-много html-кода. </body> </html> |
Что-то я не понимаю.......ничего O_o
1. Если в в документе задан iframe с определенным src, то событие онЛоад головного документа, сработает после загрузки иФрейма. 2. Если src iframe'а задается динамически, после загрузки головного документа, то, что мешает повесить обработчик на iframe.onload ЗЫ В ИЕ у документа, есть отличное свойство - readyState, в отличии от "правильных браузеров" |
Если используете в проекте jQuery, то там легко вставить обработчик.
$("#id_фрейма").load(function(){....}); У меня работает четко и под IE 6, и под Opera 10. Один лишний раз событие всплывает - при создании фрейма, но с этим легко расправиться. Далее накладок не наблюдается. Вот пример: gnezdo.wen.su/map/map.htm (точнее, с ифреймом эта страничка будет завтра. Разберусь только, как клик отловить на содержимом фрейма, и обновлю) |
Часовой пояс GMT +3, время: 14:57. |