Javascript 如何获取浏览器';是否从iframe获取当前页面URL?

Javascript 如何获取浏览器';是否从iframe获取当前页面URL?,javascript,php,jquery,facebook,iframe,Javascript,Php,Jquery,Facebook,Iframe,嗯。这可能被问了好几次,但我的问题略有不同。我的facebook应用程序中有以下页面选项卡: 此facebook页面选项卡将我的网站作为iframe嵌入其中。我想要的是在我的应用程序中获取当前页面的URL 例如,如果你打开上面的链接,你会在你的浏览器(显然)地址栏中看到facebook的URL。在iframe中,我只想检索嵌入它的父页面的URL 我知道Javascript中的同源策略不允许使用Javascript处理跨域父页面的标记,但我只想检索父页面URL,就是这样 这有可能吗? 有没有办法

嗯。这可能被问了好几次,但我的问题略有不同。我的facebook应用程序中有以下页面选项卡:

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

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

我知道Javascript中的同源策略不允许使用Javascript处理跨域父页面的标记,但我只想检索父页面URL,就是这样

这有可能吗? 有没有办法在我的PHP应用程序中访问地址栏URL

谢谢

试试以下方法之一:

parent.document.location

parent.window.document.location

parent.window.location

parent.document.location.href
我不确定这在facebook上是否有效

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

top.location.href

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

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

推荐人也帮不了什么忙

如果您想使用签名请求,并想向应用程序发送自定义数据/参数,请查看


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

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

这里描述了如何“解码”它


如果您使用的是PHP SDK,那么已经有一种方法可以为您实现这一点。

之前尝试过,它们都会打印我的应用程序文档打开浏览器控制台,并在其中键入top.location.href作为测试。它会起作用的。我添加了一张图片作为证明:)如果我拥有facebook,它可能会起作用您是在facebook的页面控制台而不是我的应用程序控制台上编写代码的。:)任何其他建议都将不胜感激,谢谢。啊,我现在明白了。您的iframe正在提供来自另一个域的内容。然后SOP适用,很遗憾,你无法摆脱它。您可以使用CORS(跨源资源共享),但这需要更高的域来允许您的域(或所有域),这不太可能:(非常感谢您的努力和洞察力。我为此给您+1。我必须找到一些方法来做到这一点。我刚刚有了一个想法!!!您可以使用http referrer字段查看请求您的页面的域:)谢谢您的回答。有没有办法破解它?您可能不需要“实际URL”,但只有页面id,我假设…?您可以通过解码在初始加载到iframe时发布到应用程序的
签名请求
参数来获得。是的,我只需要页面id,根据该页面id,我需要在我的应用程序中显示特定用户的产品。有没有示例说明如何在我的应用程序中解码此参数应用程序?添加我的评论作为答案,加上描述如何解码签名请求的链接。谢谢你的回答。如果我错了,请纠正我。根据我所掌握的信息,我们只能在用户登录或实现OAuth时获得签名请求。在我的情况下,我不能这样做。让我告诉你我的应用程序将如何工作。facebook上的任何用户(已登录或已注销)可以访问任何在其页面上安装了我的应用程序的页面。然后在安装了我的应用程序的facebook页面上,我只需要显示属于页面所有者的产品。我希望我能够以某种方式在该页面选项卡中获取页面id,以便我可以决定在该页面上显示哪些用户的产品。不,用户不必是lo登录到你的应用程序中,你也不必实现OAuth–在初始加载到iframe时,你会得到一个
已签名的\u请求
发布到你的应用程序中–当没有登录用户时,它不会包含特定的用户信息;但不管怎样,它都会包含页面信息。嗯…看起来我快要解决了。谢谢。+我已经为你准备好了。