循环 iframe 等待准备完成操作

问题描述 投票:0回答:1

我正在将一系列基于日期的 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 中的下一页。

javascript jquery iframe document-ready
1个回答
0
投票

使用

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>

© www.soinside.com 2019 - 2024. All rights reserved.