Javascript setTimeout可响应单击打开新窗口
我注意到当你Javascript setTimeout可响应单击打开新窗口,javascript,dom-events,Javascript,Dom Events,我注意到当你 $(".sitelink_external").click(function(e){ e.preventDefault(); window.open(redirectUrl,'_blank') }); 它会打开一个新的标签或窗口,而无需调用Chrome、Firefox或IE的弹出窗口阻止程序 但是,我想创建一个重定向,以便用户能够后悔,为链接创建一个计时器,如果我这样做: $(".sitelink_external").click(function(e){ e.pre
$(".sitelink_external").click(function(e){
e.preventDefault();
window.open(redirectUrl,'_blank')
});
它会打开一个新的标签或窗口,而无需调用Chrome、Firefox或IE的弹出窗口阻止程序
但是,我想创建一个重定向,以便用户能够后悔,为链接创建一个计时器,如果我这样做:
$(".sitelink_external").click(function(e){
e.preventDefault();
setTimeout("window.open(redirectUrl,'_blank')", timer * 1000);
});
它调用弹出窗口拦截器,并且没有按我想要的方式打开弹出窗口,知道如何解决这个问题吗
编辑:答案很好,但不要解决问题,因为它以前也是以同样的方式工作的。更改setTimeout调用以执行此操作:
setTimeout(function() { window.open(redirectUrl,'_blank') }, timer * 1000);
您不能按原来的方式传递变量(通常传递函数比传递将被求值的字符串更好)您可以创建一个性能非常差的同步超时函数:
function synchronousTimeout (timeout, handler) {
const start = new Date().getTime()
while ((new Date().getTime() - start) < timeout) {}
handler()
}
编辑:我刚刚意识到这个问题来自Yeaaars,哇:D啊,我怀疑你符合策略规则,即在事件处理程序中打开一个弹出窗口是可以的-这是用户触发的,但异步计时器事件中的弹出窗口不是。
$(".sitelink_external").click(function(e){
e.preventDefault();
synchronousTimeout(timer * 1000, () => window.open(redirectUrl,'_blank'));
});