![](/img/trans.png)
[英]window.open doesn't work inside set setTimeout - popup blocked
[英]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.