点击后使用setTimeout打开新窗口

3

我注意到在进行操作时

$(".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);
});

它调用了弹出窗口拦截器,而且没有按照我想要的方式打开弹出窗口,有什么解决办法吗?
编辑:这些答案很好,但并没有解决问题,因为之前它也是以同样的方式工作的。

4
我猜你遇到了一个策略规则,它指出在事件处理程序中打开弹出窗口是可以的——因为那是由用户触发的,但是如果是从异步定时器事件中打开的就不行。 - Alnitak
2个回答

1
你可以创建一个非常糟糕的性能同步超时函数:
function synchronousTimeout (timeout, handler) {
   const start = new Date().getTime()
   while ((new Date().getTime() - start) < timeout) {}
   handler()
}

然后在您的点击处理程序中简单地使用它

$(".sitelink_external").click(function(e){
  e.preventDefault();
  synchronousTimeout(timer * 1000, () => window.open(redirectUrl,'_blank'));
});

编辑:我刚刚意识到这个问题是几年前的,哇:D


0
将 setTimeout 调用更改为以下方式:
setTimeout(function() { window.open(redirectUrl,'_blank') }, timer * 1000);

你不能像你之前那样传递一个变量(通常最好传递一个函数而不是一个将被 eval 的字符串)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接