如何使用getScript回调函数内生成的URL打开新窗口,并避免弹出窗口阻止程序?

我遇到的问题是,当我尝试执行类似下面的代码时,窗口将被弹出窗口阻止程序阻止。 我正在使用getScript,以便我可以发出跨域请求。 我正在使用jQuery 1.4.2来执行以下操作。

将被阻止的代码示例:

//Code that gets blocked by pop-up blockers $(document).ready(function(){ $(".popup").click(function(){ $.getScript("URL_To_A_Javascript_File", function(){ window.open("dynamicURL", "_blank"); }); }); }); 

越过阻止程序但未及时获取URL的代码示例:

 //This code will get past the pop-up blocker, but the var url won't be updated //with the dynamicURL before the window.open() fires in browsers //like safari or chrome. $(document).ready(function(){ var url; $(".popup").click(function(){ $.getScript("URL_To_A_Javascript_File", function(){ url = "dynamicURL"; }); window.open(url, "_blank"); }); }); 

如何使用getScript回调函数内生成的URL打开新窗口,并避免弹出窗口阻止程序?

好吧,看起来我终于想出了如何做我想做的事情。

这种方式允许我弹出窗口,而不需要处理javascript的中间页面。

 var newWin; $(document).ready(function(){ $(".popup").click(function(){ newWin = window.open(); $.getScript("URL_To_A_Javascript_File", function() { newWin.location = "DynamicURL"; }); return false; }); }); 

你无法避免弹出窗口拦截器,让我们都对此表示感谢。

当您的代码从某个事件循环打开一个窗口时,这不是用户操作的直接结果(通常意味着“单击”事件),浏览器会假定用户应该选择是否查看新窗口。

对于像“getScript”这样的东西,在获取脚本时调用的处理程序属于这种非用户事件循环之一,因此阻塞规则适用。

或许,您可以从新窗口运行“getScript”代码。 浏览器允许从“单击”处理程序打开窗口。

只是不使用弹出窗口,而是使用Lightbox之类的东西。