繁体   English   中英

为什么window.open不会在setTimeout <= 1000ms时被阻止?

[英]Why doesn't window.open get blocked on a setTimeout <= 1000ms?

document.querySelector('#ontime').onclick = function() {
    setTimeout(() => {
        window.open('https://www.google.com');
    }, 1000);
};

当用户单击超时<= 1000ms(或Promise.resolve().then(...) )后使用window.open时,它不会被浏览器阻止。

如果使用超时> 1000ms或requestAnimationFrame进行相同操作,则弹出窗口将被阻止。

单击下面的链接,可以查看有关4种情况的完整示例: https : //jsfiddle.net/kouty79/rcwgbfxy/

有人知道为什么吗? 是否有关于此的任何文档或w3c规范?

HTML 5.2开始

如果满足以下任一条件,则允许算法显示弹出窗口:

可信事件的事件监听器…

…被允许显示弹出窗口的算法排队,并且这种算法的链在用户代理定义的时间范围内开始

onclick是一个受信任的事件,但是setTimeout将其放在队列中(因此没有直接调用它),因此弹出窗口必须在一定时间内到达。

该时间由浏览器决定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM