弹出窗口在ajax成功处理程序中被阻止

时间:2011-08-14 21:39:35

标签: javascript jquery popup

我正在尝试打开一个弹出窗口,允许用户通过Twitter进行身份验证,而无需离开他们正在查看的页面。我已经看到这种技术在网络上使用,特别是与Disqus评论应用程序。但是,我只能得到两个结果,或者是“弹出窗口被阻止”的消息,或者甚至没有任何结果。

我尝试过使用herehere概述的方法。我该如何解决这个问题?

我的代码目前看起来像:

var windowSizeArray = [ "width=200,height=200",
                            "width=300,height=400,scrollbars=yes" ];
var url = $('.twitter_popup').attr("href");
var windowName = $('.twitter_popup').attr("name");
var windowSize = windowSizeArray[$('.twitter_popup').attr("rel")];
window.open(url, windowName, windowSize);

2 个答案:

答案 0 :(得分:20)

当代码在脚本执行上下文中执行时,浏览器上的弹出窗口阻止程序会阻止弹出窗口。

例如,如果我们在锚上打开一个新窗口,单击弹出窗口阻止程序将不会阻止它,但如果我们尝试使用setTimeout打开一个新窗口,您将看到弹出窗口阻止程序将阻止此操作。这是因为当达到超时时,上下文现在是脚本执行上下文而不是用户操作。当我们尝试在ajax回调处理程序中打开一个新窗口时,这是相同的行为。

我认为你会遇到类似的情况。

直播 example

如果由于某种原因你想在ajax成功处理程序本身打开弹出窗口,那么你可以通过进行同步ajax调用来实现它。弹出窗口不会被阻止。

答案 1 :(得分:0)

问题可能在于以下几个方面...... 1. windowSizeArray只包含一个元素。 2.代码$('。twitter_popup')。attr(“rel”)可能会给你一些比预期更多的差异结果,因为类名被用作选择器