Как вы слушаете это событие, зависит от вас, но, как правило, лучший способ заключается в следующем:
1) создайте свой iframe программно
Он гарантирует, что ваш loadслушатель всегда вызывается, прикрепляя его до начала загрузки iframe.
<script>var iframe = document.createElement('iframe');
iframe.onload =function(){ alert('myframe is loaded');};// before setting 'src'
iframe.src ='...';
document.body.appendChild(iframe);// add it to wherever you need it in the document</script>
2) встроенный javascript - это еще один способ, который вы можете использовать внутри вашей HTML-разметки.
<script>function onMyFrameLoad(){
alert('myframe is loaded');};</script><iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe>
3) Вы также можете прикрепить прослушиватель событий после элемента внутри <script>тега, но имейте в виду, что в этом случае есть небольшая вероятность того, что iframe уже загружен к тому времени, когда вы добавите свой слушатель. Поэтому возможно, что он не будет вызываться (например, если iframe очень-очень быстрый или поступает из кеша).
<iframe id="myframe" src="..."></iframe><script>
document.getElementById('myframe').onload =function(){
alert('myframe is loaded');};</script>
С помощью этого метода вы можете запустить только одну функцию, когда загружен iframe. Смотрите мой ответ ниже, используя addEventListenerкоторый позволяет запускать несколько обратных вызовов при событии загрузки.
IEST
1
Этот подход также уязвим для состояния гонки, поскольку iframe может загружаться до выполнения тега script.
Iest 05
7
Событие загрузки не работает при попытке загрузить файл.
Ни один из приведенных выше ответов не помог мне, но это сработало.
ОБНОВЛЕНИЕ :
Как отметил @doppleganger ниже, загрузка отсутствует с jQuery 3.0, поэтому здесь используется обновленная версия on. Обратите внимание, что на самом деле это работает на jQuery 1.7+, поэтому вы можете реализовать его таким образом, даже если вы еще не используете jQuery 3.0.
Беспокоит ли меня то, что мой отладчик останавливается в моей точке останова handleLoad()до того, как я увижу визуализацию iFrame? Я надеюсь, что это чисто проблема с рендерингом, а не с загрузкой контента.
Шридхар Сарнобат,
как насчет того, чтобы захватить это событие с помощью jquery, когда iframe уже существует ... то есть: iframe не создается jquery.
Gumuruh
3
Обратите внимание, что событие onload, похоже, не срабатывает, если iframe загружается вне экрана. Это часто происходит при использовании вкладок «Открыть в новом окне» / w.
Я не думаю, что код делает то, что вы думаете, что он делает. Вы можете заменить этот селектор "#iFrame" в скрипке чем угодно, и предупреждение все равно
сработает
6
В дополнение к @roryok, готовность срабатывает, когда готов DOM, загружается не вся страница.
Иван Никитин
1
ready запускается, когда DOM готов и js может выполняться, а не при загрузке контента.
Сергей Гуссак
2
$ ("# iframeid"). ready запускает функцию, когда элемент находится в dom. Не после завершения загрузки ifram.
Ответы:
<iframe>
у элементов естьload
событие для этого.Как вы слушаете это событие, зависит от вас, но, как правило, лучший способ заключается в следующем:
1) создайте свой iframe программно
Он гарантирует, что ваш
load
слушатель всегда вызывается, прикрепляя его до начала загрузки iframe.2) встроенный javascript - это еще один способ, который вы можете использовать внутри вашей HTML-разметки.
3) Вы также можете прикрепить прослушиватель событий после элемента внутри
<script>
тега, но имейте в виду, что в этом случае есть небольшая вероятность того, что iframe уже загружен к тому времени, когда вы добавите свой слушатель. Поэтому возможно, что он не будет вызываться (например, если iframe очень-очень быстрый или поступает из кеша).Также посмотрите мой другой ответ о том, какие элементы могут также инициировать этот тип
load
событияисточник
addEventListener
который позволяет запускать несколько обратных вызовов при событии загрузки.Ни один из приведенных выше ответов не помог мне, но это сработало.
ОБНОВЛЕНИЕ :
Как отметил @doppleganger ниже, загрузка отсутствует с jQuery 3.0, поэтому здесь используется обновленная версия
on
. Обратите внимание, что на самом деле это работает на jQuery 1.7+, поэтому вы можете реализовать его таким образом, даже если вы еще не используете jQuery 3.0.источник
load
больше нет. Пожалуйста, используйте.on('load', function() { ... })
вместо этого.jquery
или,jqLite
то это путь!Для этого есть другой последовательный способ ( только для IE9 + ) в JavaScript:
И если вас интересуют Observables, это поможет:
источник
handleLoad()
до того, как я увижу визуализацию iFrame? Я надеюсь, что это чисто проблема с рендерингом, а не с загрузкой контента.Обратите внимание, что событие onload, похоже, не срабатывает, если iframe загружается вне экрана. Это часто происходит при использовании вкладок «Открыть в новом окне» / w.
источник
Вы также можете записать событие готовности jquery следующим образом:
Вот рабочий пример:
http://jsfiddle.net/ZrFzF/
источник