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

发布于 2024-11-29 23:21:51 字数 723 浏览 0 评论 0原文

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

我尝试使用此处此处。我该如何解决这个问题?

我的代码目前如下所示:

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

I am trying to open a popup window to allow a user to authenticate with twitter without having to leave the page they are viewing. I have seen this technique used around the web, particularly with the Disqus commenting application. However, I am only able to get two results, either a 'Popup window blocked' message or nothing even happens.

I have tried using the approaches outlined here and here. How can I fix this?

My code currently looks like:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

万水千山粽是情ミ 2024-12-06 23:21:52

问题可能出在以下几个方面......
1. windowSizeArray 仅包含一个元素。
2. 代码 $('.twitter_popup').attr("rel") 可能会给你一些比预期不同的结果,因为类名被用作选择器

the problem might lie in the following areas...
1. the windowSizeArray contains only a single element.
2. the code $('.twitter_popup').attr("rel") might give you some diff results than expectd because class name is used as a selector

看海 2024-12-06 23:21:51

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

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

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

实时 示例

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

The popup blockers on the browser block the the popups when the code is executing in the script execution context.

E.g If we open a new window on an anchor click the popup blocker will not block it but if we try to open a new window using setTimeout you will see that popup blocker will block this. It is because when timeout is reached the context is now script execution context instead of user action. This is the same behavior when we try to open a new window in an ajax callback handler.

I think you are into similar such situation.

Live example

If for some reason you want to open the popup in ajax success handler itself then you can achieve it by making a synchronous ajax call. The popup will not be blocked.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文