2014-10-06 91 views
3

几天来,我一直在努力(没有成功)在没有Chrome屏蔽的情况下延迟打开新窗口。延迟对我的任务至关重要,因为某些动画必须在打开窗口之前进行,而且我无法承受浏览器阻止打开新选项卡。这里是我的代码示例:拖延window.open里面的点击事件处理程序

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"); 

我试过在资源管理器(没问题),铬(问题),火狐(没问题)和Opera这个解决方案(问题)。我放弃了我的想法,因为我试过了我能记得的一切。同步ajax调用,人为触发点击,创建假锚点元素和人为触发点击事件。没什么工作正常。 奖金问题(以防有人知道如何解决问题):有没有办法在任何地方随时调用window.open &?

+0

你能为我们提供一个小提琴,或代码,使我们能够重现问题?一旦动画完成它的执行,怎么样调用'window.open'? – 2014-10-06 11:43:42

+0

我刚刚检查了这个小提琴的代码,http://jsfiddle.net/xeoctj2p/1/,我得到的问题是,弹出式窗口拦截器阻止它,可能是你必须通知用户允许弹出窗口为您的网站。 – mido 2014-10-06 11:47:54

+0

@ code-jaff:当然我已经试过了。它更糟。每次执行window.open并在每个浏览器上都会弹出阻止程序。 mido22:我不想解决那样的问题。在更糟的情况下,我会使用window.location.href,但即使这样也有其缺点。它不会立即重新加载窗口,这是最大的问题。 – AlFra 2014-10-06 12:39:32

回答

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期望能够以编程方式再次访问该窗口,所以希望你将该方法的响应声明为一个变量。至少,这就是我得到了它的工作...

+0

重要!窗口不会延迟打开窗口。它立即打开它,因为你忘记了防止默认行为(开放链接)!像我一样包含e.preventDefault:http://jsbin.com/yugugoyobega/1 – AlFra 2014-10-06 13:56:28

0

只要你知道多久动画运行,那么你睡秒
补充睡眠(),msleep()和usleep号()到Node.js,通过C++绑定。

这主要用于调试。

这些调用将通过停止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)`