Я знаю, что есть некоторые инструменты и методы для задержки загрузки javascript, но у меня есть iframe, который я хотел бы отложить загрузку до тех пор, пока остальная часть страницы не завершит загрузку и рендеринг (iframe находится в скрытом, что не будет раскрывается до тех пор, пока кто-то не нажмет на определенную вкладку на странице. Есть ли способ отложить загрузку iframe? Любые предложения будут высоко оценены. Спасибо!
Отложить загрузку iframe?
Ответы (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
Не знаю, нужно ли работать без 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; }
Я не понимаю, почему все путают 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) из этой ссылки.
Используйте Javascript в событии onLoad или в обработчике нажатия кнопки, чтобы установить атрибут src для iframe.
Это работает для меня, но есть проблемы, если вы вообще измените код:
function loadIFrame() {
window.frames['BodyFrame'].document.location.href = "iframe.html";
}
function delayedLoad() {
window.setTimeout(loadIFrame2, 5000);
}
С использованием:
<iframe src="" onLoad="delayedLoad()"></iframe>
Вы можете использовать атрибут defer, когда нужно загрузить последнюю после css, js и т. д.:
iframe defer src="//player.vimeo.com/video/89455262"
Загрузить 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>
Вы можете использовать атрибут загрузки для отложенной загрузки iframe.
<iframe src="https://example.com"
loading="lazy"
width="600"
height="400"></iframe>
Вы также можете применить display:none к iframe с помощью CSS, а затем использовать jQuery .show следующим образом:
$(document).ready(function(){
$('iframe.class_goes_here').show();
});
display:none
dom - он просто не будет отображаться.
- person Eamon Nerbonne; 28.08.2013
window.setTimeout(function(){
$("#myframe").attr("src","exp3.html");
$("#myframediv").show("slow");
},4000);
попробуйте это, это тоже работает.
Или мое любимое использование
setTimeout('your app', 6000)
Это заставит его ждать x миллисекунд для вызова любой функции....
'your app'
в вашем примере?
- person fresskoma; 13.11.2012