繁体   English   中英

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

[英]How can I open a new window using a URL that is generated inside the getScript callback function, and avoid pop-up blockers?

我遇到的问题是当我尝试执行类似下面的代码时,窗口将被弹出窗口阻止程序阻止。 我正在使用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之类的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM