如何检测是否加载了网页的所有内容
How to detect if all contents of a web page are loaded
有没有办法检测是否加载了网页上的所有资源?即使我只能检测到所有图像都已完全加载,这也会有很大帮助。我的情况是这样的:
我在页面中有一个 iframe,在 iframe 内部,有一个调用 window.print() 的函数,它将打印 iframe 的内容。 iframe 的内容是在单击 iframe 父级中的按钮时生成的。此按钮还负责在生成内容后立即调用 iframe 内的打印功能。
问题是单击按钮后,会生成 html,然后调用 window.print() 显示打印预览 window。但这种情况发生得太快,图像尚未加载,因此打印预览 window 显示空图像。
我试图在调用 window.print() 之前检查是否所有图像都已加载,但我不确定该怎么做。我尝试了一个 while 循环,检查完整的 属性,类似于:
var img = document.getElementById("myImg");
while (!img.complete) {
}
window.print();
但它最终陷入无限循环。
知道我有哪些选择吗?
我碰巧有一个 gif 加载器脚本可以帮助你:
var gif = new Image();
gif.src = 'https://media.giphy.com/media/HoaHfvovCLSvu/giphy.gif';
gif.onload = function() {
console.log("Image 1 ready to append");
document.querySelector('.bg-image').src = gif.src;
};
<div class="bg-container">
<img class="bg-image" src="https://placekitten.com/200/300" alt="Banner" />
</div>
在您的情况下,您可以执行 foreach 并检查是否所有图像都已加载:
var images = document.querySelectorAll('.bg-image');
var counter = 0;
images.forEach(function(image) {
var gif = new Image();
gif.src = 'https://placekitten.com/200/300';
gif.onload = function() {
console.log("Image ready to append");
image.src = gif.src;
counter++;
if (counter === images.length) {
doPrint();
}
}
});
function doPrint() {
console.log("Image ready to print");
}
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
或 ES6 Promise:
var images = document.querySelectorAll('.bg-image');
function appendImages(image, cb) {
setTimeout(() => {
var gif = new Image();
gif.src = 'https://placekitten.com/200/300';
gif.onload = function() {
console.log("Image ready to append");
image.src = gif.src;
cb();
}
//delay
}, 100);
}
var requests = [...images].map((image) => {
return new Promise((resolve) => {
appendImages(image, resolve);
});
})
function doPrint() {
console.log("Image ready to print");
}
Promise.all(requests).then(() => doPrint());
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
Jquery 文档就绪在这种情况下应该有效:
$( document ).ready(function() {
console.log( "ready!" );
});
有没有办法检测是否加载了网页上的所有资源?即使我只能检测到所有图像都已完全加载,这也会有很大帮助。我的情况是这样的:
我在页面中有一个 iframe,在 iframe 内部,有一个调用 window.print() 的函数,它将打印 iframe 的内容。 iframe 的内容是在单击 iframe 父级中的按钮时生成的。此按钮还负责在生成内容后立即调用 iframe 内的打印功能。
问题是单击按钮后,会生成 html,然后调用 window.print() 显示打印预览 window。但这种情况发生得太快,图像尚未加载,因此打印预览 window 显示空图像。
我试图在调用 window.print() 之前检查是否所有图像都已加载,但我不确定该怎么做。我尝试了一个 while 循环,检查完整的 属性,类似于:
var img = document.getElementById("myImg");
while (!img.complete) {
}
window.print();
但它最终陷入无限循环。
知道我有哪些选择吗?
我碰巧有一个 gif 加载器脚本可以帮助你:
var gif = new Image();
gif.src = 'https://media.giphy.com/media/HoaHfvovCLSvu/giphy.gif';
gif.onload = function() {
console.log("Image 1 ready to append");
document.querySelector('.bg-image').src = gif.src;
};
<div class="bg-container">
<img class="bg-image" src="https://placekitten.com/200/300" alt="Banner" />
</div>
在您的情况下,您可以执行 foreach 并检查是否所有图像都已加载:
var images = document.querySelectorAll('.bg-image');
var counter = 0;
images.forEach(function(image) {
var gif = new Image();
gif.src = 'https://placekitten.com/200/300';
gif.onload = function() {
console.log("Image ready to append");
image.src = gif.src;
counter++;
if (counter === images.length) {
doPrint();
}
}
});
function doPrint() {
console.log("Image ready to print");
}
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
或 ES6 Promise:
var images = document.querySelectorAll('.bg-image');
function appendImages(image, cb) {
setTimeout(() => {
var gif = new Image();
gif.src = 'https://placekitten.com/200/300';
gif.onload = function() {
console.log("Image ready to append");
image.src = gif.src;
cb();
}
//delay
}, 100);
}
var requests = [...images].map((image) => {
return new Promise((resolve) => {
appendImages(image, resolve);
});
})
function doPrint() {
console.log("Image ready to print");
}
Promise.all(requests).then(() => doPrint());
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
<img class="bg-image" src="" alt="default" />
Jquery 文档就绪在这种情况下应该有效:
$( document ).ready(function() {
console.log( "ready!" );
});