【问题标题】:How to get browser's current page URL from iframe?如何从 iframe 获取浏览器的当前页面 URL?
【发布时间】:2014-07-24 09:34:27
【问题描述】:

好的。这可能已被多次询问,但我的问题略有不同。我的 Facebook 应用程序中有以下页面选项卡:

Facebook Page Tab

这个 facebook 页面选项卡将我的网站作为 iframe 嵌入其中。我想要的是在我的应用程序中获取当前页面的 URL。

例如,如果您打开上面的链接,您会在浏览器(显然)地址栏中看到 facebook URL。在我的 iframe 中,我只想检索它所嵌入的父页面的 URL。

我知道 Javascript 中的同源策略不允许使用 javascript 处理跨域父页面的标记,但我只想检索父页面 URL,仅此而已。

这有可能吗? 有什么方法可以访问我的 PHP 应用程序中的地址栏 URL?

谢谢。

【问题讨论】:

  • 您可能不需要“实际 URL”,而只需要页面 id,我想……?您可以通过解码signed_request 参数来获得,该参数在初始加载到 iframe 时发布到您的应用程序。
  • 是的,我只需要页面 ID,基于该页面 ID,我需要在我的应用程序中显示特定用户的产品。有什么例子可以说明我如何在我的应用程序中解码这个参数?
  • 添加我的评论作为答案,以及描述如何解码签名请求的链接。

标签: javascript php jquery facebook iframe


【解决方案1】:

您可能不需要“实际 URL”,而只需要页面 id,我想……?您可以通过解码 signed_request 参数来获得,该参数在初始加载到 iframe 时发布到您的应用程序。

这里描述了如何“解码”它,https://developers.facebook.com/docs/facebook-login/using-login-with-games#parsingsr

如果您使用的是 PHP SDK,那么它已经有一个方法可以为您执行此操作。

【讨论】:

  • 感谢您的回答。如果我错了,请纠正我,据我所知,我们只能在用户登录或我们实施 OAuth 时获得签名请求。就我而言,我不能这样做。
  • 让我告诉你我的应用程序将如何工作。 facebook 上的任何用户(logged_in 或logged_out)都可以访问在其页面上安装了我的应用程序的任何页面。然后在安装了我的应用程序的那个 facebook 页面上,我只需要显示属于页面所有者的产品。
  • 我希望以某种方式获得该页面选项卡中的 page_id,以便决定在该页面上显示哪些用户的产品。
  • 不,用户不必登录到您的应用程序,您也不必实施 OAuth – 无论如何,在初始加载到 iframe 时,您都会收到一个signed_request 发布到您的应用程序 –当没有登录用户时,它不会包含特定的用户信息;但无论如何它都会包含页面信息。
  • 嗯...看来我快要解决它了..谢谢。已经为你 +1。
【解决方案2】:

您可以使用它在 JavaScript 中访问它:

top.location.href

"top" 优于 "parent"。因为如果您的 iframe 本身位于另一个 iframe 中,那么父级将返回该 iframe 的位置。 "top" 将返回最高位置。

【讨论】:

  • 打开浏览器控制台并在其中输入 top.location.href 作为测试。它会起作用的。我添加了一张图片作为证据:)
  • 如果我拥有 facebook,它可能会奏效。 :) 您正在 facebook 的页面控制台上编写代码,而不是我的应用程序的控制台。 :) 任何其他建议将不胜感激,谢谢。
  • 啊,我现在明白了。您的 iframe 正在提供来自另一个域的内容。然后 SOP 适用,不幸的是你无法摆脱它。您可以使用 CORS(跨域资源共享),但这需要更高的域来允许您的域(或所有域),这不太可能:(
  • 非常感谢您的努力和洞察力。我为此给你+1。我得想办法做到这一点。
  • 我有一个想法!!!您可以使用 http referrer 字段来查看请求您页面的域:)
【解决方案3】:

这将是一个艰难的过程,因为 CORS 禁止访问外部框架:

推荐人也没有多大帮助。

如果您想使用signed_request,并希望将自定义数据/参数发送到您的应用,请查看https://developers.facebook.com/docs/appsonfacebook/pagetabs#integrating

然后您可以填写app_data 参数,并在您的应用中对其进行解码。

【讨论】:

  • 感谢您的回答。有什么办法破解它?
【解决方案4】:

尝试以下方法之一:

parent.document.location

parent.window.document.location

parent.window.location

parent.document.location.href

我不确定这是否可以在 facebook 上使用

【讨论】:

  • 之前试过,他们都打印了我的申请文件
猜你喜欢
  • 2021-12-09
  • 1970-01-01
  • 2014-11-21
  • 2011-01-18
  • 2015-08-09
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2023-02-18
相关资源
最近更新 更多