Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.10.2009, 14:46
Goa Goa вне форума
Новичок на форуме
Отправить личное сообщение для Goa Посмотреть профиль Найти все сообщения от Goa
 
Регистрация: 06.03.2008
Сообщений: 9

Как определить загружен ли iframe
Господа! Может кто-нить знает как определить загружен iframe или нет.
Желательно бы кроссбраузерно. В IE можно определять по ifr.contentWindow.document.body, а в остальных я определял ifr.contentDocument && ifr.contentDocument.URL=="about:blank" (то есть еще не загружен). Но толи обновился firefox и перестал работать метод в нем.
Хочется чего то более корректного.
Ответить с цитированием
  #2 (permalink)  
Старый 27.10.2009, 14:48
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

У элемента iframe есть событие onload.
Ответить с цитированием
  #3 (permalink)  
Старый 27.10.2009, 14:56
Goa Goa вне форума
Новичок на форуме
Отправить личное сообщение для Goa Посмотреть профиль Найти все сообщения от Goa
 
Регистрация: 06.03.2008
Сообщений: 9

Дело в том, что если вешать на onload обработчик, то он срабатывает только тогда когда он вешается на еще не загруженный ифрейм. А мне надо определить загружен ифрейм и если нет - вешать обработчик на onload, а если да то просто выполнить его.
Ответить с цитированием
  #4 (permalink)  
Старый 29.10.2009, 22:33
Goa Goa вне форума
Новичок на форуме
Отправить личное сообщение для Goa Посмотреть профиль Найти все сообщения от Goa
 
Регистрация: 06.03.2008
Сообщений: 9

Итак, проблему я исследовал. И пришел к ряду выводов:
- В IE проблема решается проверкай ifr.contentWindow.document.body
- В правильных браузерах можно рассмотреть три ситуации:
1. Заведомо известно, что в ифрейме есть содержимое. В таком случае можно делать проверку любого свойства, завязанном на содержимом(innerHTML, textContent, innerText, childNodes, firstChild и т. д.)
2. Известен URL ифрейма. В этом случае: ifr.contentDocument.URL!="about:blank"
3. Если же ифрейм создается динамически и URL не указан, в таком случае определить загрузился ли ифрейм нельзя.
Ответить с цитированием
  #5 (permalink)  
Старый 30.10.2009, 11:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Goa
- В IE проблема решается проверкай ifr.contentWindow.document.body
Это значит только, что загрузился, как минимум, открывающий тег body, а не вся страница.
Ответить с цитированием
  #6 (permalink)  
Старый 30.10.2009, 14:20
Goa Goa вне форума
Новичок на форуме
Отправить личное сообщение для Goa Посмотреть профиль Найти все сообщения от Goa
 
Регистрация: 06.03.2008
Сообщений: 9

Интересно))
Проверял? Дело в том, что у меня это работает. А более глубокий анализ я не делал.
Ответить с цитированием
  #7 (permalink)  
Старый 30.10.2009, 14:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А самому проверить?
<html>
<body>
<script type="text/javascript">alert(document.body);</script>
Еще много-много html-кода.
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 30.10.2009, 15:01
Аспирант
Отправить личное сообщение для IIIEPJIOK Посмотреть профиль Найти все сообщения от IIIEPJIOK
 
Регистрация: 23.12.2008
Сообщений: 75

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

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

Последний раз редактировалось IIIEPJIOK, 30.10.2009 в 15:05.
Ответить с цитированием
  #9 (permalink)  
Старый 02.11.2009, 05:23
_________________
 
Сообщений: n/a

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как передать значение переменной в IFRAME в поле формы JS-ом из самой страницы? DeUre Общие вопросы Javascript 14 17.12.2013 16:37
Как определить активное окно/вкладку? Chameleon Events/DOM/Window 5 19.03.2012 08:59
Как достучаться до удаленного iframe ilinsky Общие вопросы Javascript 1 27.10.2009 09:33
как можно создать iframe со скриптами GOll Общие вопросы Javascript 2 05.05.2009 11:32
как определить шрифты scuter Общие вопросы Javascript 9 19.05.2008 14:32