Отложить загрузку iframe?

Я знаю, что есть некоторые инструменты и методы для задержки загрузки javascript, но у меня есть iframe, который я хотел бы отложить загрузку до тех пор, пока остальная часть страницы не завершит загрузку и рендеринг (iframe находится в скрытом, что не будет раскрывается до тех пор, пока кто-то не нажмет на определенную вкладку на странице. Есть ли способ отложить загрузку iframe? Любые предложения будут высоко оценены. Спасибо!


person Sean    schedule 19.10.2009    source источник


Ответы (11)


с jquery это просто!

либо заключите свой код, который загружает iframe в $(), либо используйте $(document).ready(function(){}), оба они одинаковы и будут выполнять ваш код после того, как DOM будет готов!

e.g.

$(document).ready(function(){
    $('iframe#iframe_id').attr('src', 'iframe_url');    
});

подробнее см. на странице http://www.learningjquery.com/2006/09/introduction-document-ready

person Tzury Bar Yochay    schedule 19.10.2009
comment
Оказывается, ваша первая строка решила все. Я использовал ужасный шаблон для вкладок, который я скачал со случайного веб-сайта, и ему нравилось отображать мой скрытый iframe перед всем, пока он полностью не загрузился. Когда я переключился на использование вкладок jquery (которые выглядели намного лучше при загрузке!), рендеринг iframe больше не был проблемой. jQuery ПОТРЯСАЕТ! Спасибо :) - person Sean; 20.10.2009
comment
В IE это может сломать кнопку «Назад», поскольку добавляет новый источник iframe в историю браузера. - person Sjoerd; 08.04.2011
comment
Количество людей, отвечающих на jQuery, когда их спрашивают о Javascript, в наши дни пугает. - person Piyush Soni; 15.02.2014
comment
@PiyushSoni Мы тратим годы на то, чтобы люди привыкли к использованию комплексного решения, такого как jQuery, для обеспечения согласованности браузера, и теперь пуристы жалуются на это? Обучение людей работает лучше, чем жалобы. :) - person James Lee Baker; 09.04.2016

Не знаю, нужно ли работать без javascript. Но лучший способ — изменить src сразу после iframe:

<iframe id="myIframe" src="http://.." />
<script type="text/javascript">
  var iframe = document.getElementById('myIframe').src = iframe.src;
  iframe.src = '';
  document.onload =  function(){iframe.src = src;}
</script>

Использование $(document).ready запустит рендеринг вашего Iframe сразу после построения дерева DOM, но до загрузки всего содержимого на вашей стороне, поэтому я думаю, что это не то, что вам нужно.

jquery имеет событие .load, аналогичное onload (после загрузки всех ресурсов)

$(window).load(function(){  iframe.src = src; }
person Andreas Köberle    schedule 19.10.2009
comment
Эй, эскимос! Я предполагаю, что ваш ответ сработает, хотя я не смог заставить его работать (я уверен, что это произошло из-за проблемы с моей стороны) :) У меня еще недостаточно репутации, чтобы проголосовать за вас, но спасибо за предложение! - person Sean; 20.10.2009

Я не понимаю, почему все путают JAVASCRIPT с JQUERY, но...

Чистое решение JS приведено ниже: (в основном оно ожидает построения DOM, а затем загружает все фреймы на вашей странице).

<iframe src="" data-src="YOUR ACTUAL iFRAME URL">
<script type="text/javascript">
      function load_iframes() {
var vidDefer = document.getElementsByTagName('iframe');
for (var i=0; i<vidDefer.length; i++) {
if(vidDefer[i].getAttribute('data-src')) {
vidDefer[i].setAttribute('src',vidDefer[i].getAttribute('data-src'));
} } }
      document.addEventListener("DOMContentLoaded", function(event) {
         load_iframes();
      });
    </script>

Примечание. Будьте осторожны при использовании события document.load. Любой ресурс, который имеет проблему или должен потратить 1 минуту на загрузку, остановит выполнение вашего кода. Этот фрагмент кода изменен (замена load на domcontentloaded) из этой ссылки.

person MarketerInCoderClothes    schedule 21.02.2019
comment
Благодарю вас! КогдаWillJQueryDie.com - person MarsAndBack; 23.07.2021

Используйте Javascript в событии onLoad или в обработчике нажатия кнопки, чтобы установить атрибут src для iframe.

person devio    schedule 19.10.2009

Это работает для меня, но есть проблемы, если вы вообще измените код:

function loadIFrame() {
    window.frames['BodyFrame'].document.location.href = "iframe.html";
}         
function delayedLoad() {
    window.setTimeout(loadIFrame2, 5000);
}

С использованием:

<iframe src="" onLoad="delayedLoad()"></iframe>
person djangofan    schedule 30.03.2013

Вы можете использовать атрибут defer, когда нужно загрузить последнюю после css, js и т. д.:

iframe defer src="//player.vimeo.com/video/89455262"
person user956584    schedule 11.04.2014

Загрузить iFrame после загрузки страницы с помощью JQuery и небольшого количества html и js

// Javascript
$(window).bind("load", function() {
  $('#dna_video').prepend('<iframe src="//player.vimeo.com/video/86554151" width="680" height="383" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>');
});
<!-- Append JQuery-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<!-- HTML -->
<div id="dna_video"></div>

person Amir Hosseinzadeh    schedule 10.09.2017

Вы можете использовать атрибут загрузки для отложенной загрузки iframe.

<iframe src="https://example.com"
        loading="lazy"
        width="600"
        height="400"></iframe>
person iSWORD    schedule 17.05.2021

Вы также можете применить display:none к iframe с помощью CSS, а затем использовать jQuery .show следующим образом:

$(document).ready(function(){ 
    $('iframe.class_goes_here').show(); 
});
person Ian R.    schedule 21.12.2010
comment
iframe все равно будет загружаться, даже если в поддереве display:none dom - он просто не будет отображаться. - person Eamon Nerbonne; 28.08.2013

window.setTimeout(function(){   
$("#myframe").attr("src","exp3.html");
$("#myframediv").show("slow");
},4000);

попробуйте это, это тоже работает.

person Poorna    schedule 21.02.2019

Или мое любимое использование

setTimeout('your app', 6000)

Это заставит его ждать x миллисекунд для вызова любой функции....

person crosenblum    schedule 19.10.2009
comment
Что именно означает 'your app' в вашем примере? - person fresskoma; 13.11.2012