为什么窗口加载事件在递归调用时不会触发?



打开新选项卡时未触发窗口加载事件。以下是执行相同操作的示例代码。在这里,正在尝试在单独的同一选项卡中一个接一个地打开 URL 列表,因为没有触发 onload 事件,也没有发生递归调用。

var urls = ['https://stackoverflow.com/q/4907843', 'https://stackoverflow.com/q/19851782', 'https://stackoverflow.com/q/726761'];
function opennewtab(i) {
var w = window.open(urls[i], 'so', '');
if (w) {
w.onload = function() {
opennewtab(i + 1);
}
}
};
opennewtab(0);

它们都位于同一域中。请将代码片段粘贴到浏览器开发人员工具的同一页面中。

为什么不使用承诺呢? 我还没有测试过,但它应该看起来像这样:

const urls = 
[ 'https://stackoverflow.com/q/4907843'
, 'https://stackoverflow.com/q/19851782'
, 'https://stackoverflow.com/q/726761'
] 
function Load_URL(url) {
return new Promise(res=>{
let w = window.open(url, 'so', '')
w.addEventListener('load', res)
}) 
}
for (let url_x of urls) await Load_URL(url_x)

相关内容

  • 没有找到相关文章

最新更新