【问题标题】:How do I create an indeterminately delayed popup (for Social Auth) with window.open without a popup blocker stopping it如何使用 window.open 创建一个不确定延迟的弹出窗口(用于社交身份验证)而没有弹出窗口阻止程序阻止它
【发布时间】:2012-06-24 22:20:29
【问题描述】:
我想要的体验是:
- 用户点击“注册”
- 发生了一些异步服务器问题(检查和验证。随便)
- 完成所需的异步服务器内容后,会弹出 Facebook/Twitter/任何身份验证对话框。
让这变得困难的几件事:
- 社交弹出窗口小部件必须在弹出窗口中。他们不能在里面
的 iframe。
- 弹出窗口阻止程序将阻止任何不在单击处理程序的即时函数中的 window.open 代码
- window.open 来自标准 ajax 回调处理程序的代码将被弹出窗口阻止程序阻止。
- 在 jQuery 1.8 中不推荐使用同步 ajax 请求
有什么想法吗?
【问题讨论】:
标签:
javascript
jquery
facebook
twitter
popup
【解决方案1】:
这是一个常见的long-lamented problem。尽管 jQuery 可能会弃用同步 AJAX,但您始终可以使用非 jQuery AJAX 请求。另一种可能性是进行以下重构:
- 用户点击“注册”
- 脚本调用 window.open 到本地 URI
- 加载时出现弹出窗口并运行“检查和验证”
- 如果出现验证错误,弹出窗口会向父级发送错误并自行关闭
- 如果没有,弹出窗口中的本地页面将重定向到 FB/Twitter OAuth 流
如果可能的话,我建议这样做。如果不是,async: false (或编写您自己的非常简单的跨浏览器 XHR 包装器)仍然是最好的方法。