我正在将一系列基于日期的 URL 加载到 iframe 中,以使用顶部框架上的脚本(同源)从每个页面提取数据。
在日期循环将下一个项目加载到 iframe 之前等待 iframe 准备好(并执行操作)的最佳/最有效方法是什么? (有或没有 jQuery)
var start = new Date("01/01/2024");
var end = new Date("01/31/2024");
var loop = new Date(start);
while(loop <= end){
$("#iframe").attr("src", "data.htm?" + loop);
$("#iframe").ready(function() {
// Do something in iframe e.g. $("#iframe").contents().find("#export").click()
});
var newDate = loop.setDate(loop.getDate() + 1);
loop = new Date(newDate);
}
循环似乎没有等待 iframe 加载就继续第二天。我假设 iframe 加载/就绪函数仅附加函数,但不会阻止循环加载 iframe 中的下一页。
使用
await
并承诺等待下一个 while 循环:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
<script type="module">
var start = new Date("01/01/2024");
var end = new Date("01/31/2024");
var loop = new Date(start);
while(loop <= end){
$("#iframe").attr("src", "data.htm?" + loop);
await new Promise(resolve => $("#iframe").ready(function() {
// Do something in iframe e.g. $("#iframe").contents().find("#export").click()
resolve();
}));
var newDate = loop.setDate(loop.getDate() + 1);
loop = new Date(newDate);
}
</script>