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

时间:2014-10-06 11:18:32

标签: javascript jquery settimeout window.open

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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希望能够以编程方式再次访问该窗口,因此您希望将该方法的响应声明为变量。至少,这就是我如何运作......

答案 1 :(得分: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)`