【问题标题】:window.opener null after redirect?重定向后window.opener null?
【发布时间】:2011-08-20 22:00:37
【问题描述】:

所以我在我的网站上添加了一个“使用 Twitter 登录”按钮。我在弹出窗口中显示 twitter 登录。当用户登录 twitter 时,他们会被重定向回我网站上的一个页面,该页面调用 window.opener 上的 javascript 函数来通知页面登录已完成并刷新。

问题是在 twitter 将用户重定向回我的站点之后 window.opener 为空。如果我绕过 twitter 登录页面,该脚本可以正常工作。这似乎也是一个 IE 问题,因为它在 Firefox 中运行良好。

有什么想法吗?

提前致谢!

【问题讨论】:

  • window.opener 何时为空。当您重定向弹出窗口或父页面时?如果是后者,这是 IIRC 的正常行为,opener 指向打开的文档而不是窗口。
  • 它指向window 对象,但是是的,opener 是暂时的,不会在文档加载后幸存下来。在弹出窗口中登录不是一个好主意。
  • 是的,要明确的是弹出窗口被重定向并试图调用window.opener。我的要求是使用 twitter 登录并且不引导用户离开我们的页面。 Twitter 阻止在 iFrame 中使用他们的登录信息,因此弹出窗口是我在这里唯一真正的选择。如果重定向后我无法引用 window.opener 那么如何通知父窗口子窗口正在关闭并且登录已完成?
  • 如果你真的需要,可以在支持它的浏览器上使用 HTML5 postMessage 进行跨窗口通信,或者无法从一个窗口写入 document.cookie 并在另一个窗口中读取它。但这不是一个好主意。 “不将用户重定向到我们的页面”是一个典型的虚假经理要求。

标签: javascript internet-explorer twitter oauth


【解决方案1】:

检查window.opener is null after redirect。如果您首先在弹出窗口中提供您自己域的页面,则不会丢失父信息。至少它对我有用。

【讨论】:

    【解决方案2】:

    也许您可以使用包含 iframe 的灯箱来登录 Twitter。然后你可以使用“top”而不是“window.opener”。

    【讨论】:

    • 这是我的第一个想法。然而,twitter 的登录页面中嵌入了代码,如果显示在 iFrame 中,则会破坏页面。
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多