在单击事件处理程序中延迟window.open

问题描述 投票:3回答:2

有些日子,我一直在尝试(没有成功)打开新窗口,延迟时间没有Chrome阻止它。延迟对我的任务至关重要,因为某些动画必须在打开窗口之前进行,我无法让浏览器阻止打开新标签。以下是我的代码中的示例:

element.on("click", function(e){
    e.preventDefault();
    var self = $(this),
        url = self[0].href;

    window.setTimeout(function(){
        window.open(url);
    }, 1000);
});

element是jQuery对象(锚元素要更精确)。我注意到如果我像这样直接传递字符串,我的成功率会更高

window.open("http://example.com");

我在资源管理器(没问题),Chrome(问题),Firefox(没问题)和Opera(问题)中尝试过这个解决方案。我失去了理智,因为我已经尝试了所有我能记住的东西。同步ajax调用,人为触发click,创建假锚元素并人为触发click事件。什么都行不通。奖金问题(如果有人知道如何解决问题):有没有办法随时随地通过代码调用window.open?

javascript jquery settimeout window.open
2个回答
0
投票

这对我在Chrome http://jsbin.com/wuqopukayuwi/4/工作

var $element = $('#link');


$element.on('click', function () {

   var url= $(this).attr('href');

   window.setTimeout(function(){

     var windowObjRef = window.open(url);

     console.log(windowObjRef);

  }, 2000);

});

要检查的事项:

  • 显然,请仔细检查您是否在Chrome中为您的域启用了弹出窗口(它会在第一次尝试弹出新窗口时提示您
  • 这是因为Chrome希望能够以编程方式再次访问该窗口,因此您希望将该方法的响应声明为变量。至少,这就是我如何运作......

0
投票

只要你知道动画运行了多长时间,你就会睡几秒钟 通过C ++绑定将sleep(),msleep()和usleep()添加到Node.js。

这主要用于调试。

这些调用将通过暂停Node.js的事件循环来阻止所有JavaScript的执行!

用法

`var sleep = require('sleep');
sleep.sleep(n): sleep for n seconds
sleep.msleep(n): sleep for n miliseconds
sleep.usleep(n): sleep for n microseconds (1 second is 1000000 
microseconds)`
© www.soinside.com 2019 - 2024. All rights reserved.