---编辑。
我不明白;昨天似乎被忽略了;现在它似乎正在起作用。甚至在循环内并通过setTimeout()
调用。目前我似乎难以复制昨天的行为......发生了什么事?
---第二次编辑。
首先想法如何“修复”问题的复制:奇怪的是,这是否有效似乎取决于当前的URL!例如。作品from SE-sites,但不是http://www.asdf.com/。怎么样?
setTimeout()
在这里工作:
setTimeout(function(){ alert("Hello"); }, 3000);
和 window.open()
在这里工作:
window.open("https://www.bbc.com","_self");
甚至这两个作品的组合在这里:
setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);
突然意外地将两者的组合 - 静默地 - 在循环中忽略:
i=0;
while(i < 100)
{
setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);
i++
}
为什么?
tldr;
这个问题似乎已经接近一百万次,但现在还没有(据我所知/搜索)简洁的Q&amp; A格式; e.g。
Settimeout() javascript function is ignored
Simulating JavaScript's setTimeout() method “from first principles”
答案 0 :(得分:1)
{{3}}
从本质上讲,尝试从 <iframe>
中解雇window.open
会让浏览器“认为”这是一个应得的弹出窗口(无声)阻塞。 - 相反,如果setTimeout()
被自己触发,则浏览器对待它似乎将 视为“用户点击” ,也就是说,不是作为要阻止的垃圾邮件。