Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout可响应单击打开新窗口_Javascript_Dom Events - Fatal编程技术网

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'));
});