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

标签 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);

最佳答案

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

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

我想你也遇到过类似的情况。

直播 example

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

关于javascript - 弹出窗口在 ajax 成功处理程序中被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7059902/

相关文章:

javascript - 更改iframe src而不刷新父页面

javascript - 更改变量中的链接

jquery - 使用 jQuery 显示 JSON 对象中的嵌套项目

jquery - css 弹出窗口不适用于表格的最后一行

javascript - PHP 计算器 - 在页面和 Ajax 弹出窗口中显示结果

javascript - 如何等待所有 'put' 操作并行运行完成?

javascript - 用于在评论部分呈现星级值的 While 循环

php - 根据数据库中下拉列表的值自动完成

Spring @MVC 和带有 x-www-form-urlencoded 数据的 @RequestBody 注释?

popup - Google Apps 脚本中的简单弹出窗口或对话框