document.querySelector('#ontime').onclick = function() {
setTimeout(() => {
window.open('https://www.google.com');
}, 1000);
};
在用户点击超时< = 1000ms(或Promise.resolve().then(...)
)后使用window.open时,它不会被浏览器阻止。
如果你使用超时>做同样的事情1000毫秒或requestAnimationFrame
,弹出窗口被阻止。
单击以下链接可获得4个案例的完整示例: https://jsfiddle.net/kouty79/rcwgbfxy/
有人知道为什么吗?有没有关于此的文档或w3c规范?
答案 0 :(得分:1)
来自HTML 5.2:
如果满足以下任一条件,则允许算法显示弹出窗口:
...
受信任事件的事件侦听器 ...
...由允许显示弹出窗口的算法排队,此类算法链在用户代理定义的时间范围内开始。
onclick
是一个受信任的事件,但setTimeout
将其放入队列中(因此不会直接调用),因此弹出窗口必须在一定时间内完成。
该时间取决于浏览器的决定时间。