检查我的 iframe 是否在 Facebook 文档中?

发布于 2024-12-08 13:56:32 字数 286 浏览 0 评论 0原文

我创建了一个 Facebook 应用程序,将我的网站放置在 iframe 中。

对于每个请求,我都想检查该网站是否位于 Facebook 应用程序内,否则我想将用户重定向到 Facebook 应用程序。

我可以使用 javascript 检查我是否在 iframe 中:

if (top != self)

但我不知道我是否真的在 Facebook 应用程序中。 跨域安全性阻止我访问父文档的信息。例如,无法访问“top.location.href”。

有人可以帮我吗? :-)

I have created a Facebook app to house my site within an iframe.

At every request I want to check that the site is inside the Facebook app, otherwise I want to redirect the user to the Facebook app.

I can check that I am within an iframe with javascript:

if (top != self)

But I don't know if I'm actually inside the Facebook app.
The cross-domain security hinders me from accessing the parent document's info. For example, "top.location.href" cannot be accessed.

Can someone help me out? :-)

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

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

发布评论

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

评论(3

你穿错了嫁妆 2024-12-15 13:56:32

Facebook 为 window.name 附加了一个值,以便您可以使用 JavaScript 进行检查。

if(window.name.indexOf('iframe_canvas_fb') != -1){
  // in Facebook
} else {
  // not in Facebook
}

Facebook attaches a value to window.name so you can use JavaScript to check.

if(window.name.indexOf('iframe_canvas_fb') != -1){
  // in Facebook
} else {
  // not in Facebook
}
仅一夜美梦 2024-12-15 13:56:32

您可以从 facebook 的 javascript 库检查 FB.Canvas 命名空间方法。它将在 Facebook 画布上运行。

https://developers.facebook.com/docs/reference/javascript/FB.Canvas.getPageInfo/  

检查您在 Facebook 的 iframe、外部 iframe 或另一个 iframe 中获得的信息。

希望这有帮助

You can check FB.Canvas namespace methods from facebook's javascript library. It will work on Facebook canvas.

https://developers.facebook.com/docs/reference/javascript/FB.Canvas.getPageInfo/  

check what info do you get while in the facebook's iframe, outside iframe or in another iframe.

hope this helps

兔小萌 2024-12-15 13:56:32

如果用户不在 Facebook 之外,body html 标签之前的这段脚本应该将他们重定向回您在 Facebook 上的页面:

<script language="JavaScript" type="text/javascript">
<!--
if (self == top) {
    window.location = "http://apps.facebook.com/YOUR_APP_PAGE";
}
-->
</script>

记住将“YOUR_APP_PAGE”位更改为以下内容:
'my-application?app_data=page-location'

您可以使用 php 将请求 ?app_data 发送到您的 Facebook 页面,并附加您的网站重定向的页面,以便 app_data 可以告诉您的应用程序加载此页面,但在 Facebook 内。

因此,值得查找 Facebook app_data

如果您想更改页面的样式,具体取决于它是否显示在 Facebook 上,则使用此:

<script language="JavaScript" type="text/javascript">
<!--
if (window.self = "http://apps.facebook.com/") {
    var element = document.getElementById('html');
    element.className = "facebook"; 
}
-->
</script>

并使用 id=html 修改您的 html 标签,如下所示:

<html id="html" xmlns:fb="http://www.facebook.com/2008/fbml">

这将允许您使用类名 .facebook 为您喜欢的页面重新映射任何样式。

如果您需要设置一些初始 php 设置(例如重定向页面),那么您可以在 php 中使用此代码来检测您是否在 Facebook 中,但是此代码无法检测用户登录后是否在 Facebook 上:

if(!empty($_POST['signed_request'])){
//do something with php here...
}

注意:

您的应用程序页面上的 Facebook 用户不太可能关闭 JavaScript,这就是为什么我们可以使用上面的 php 代码来设置重定向等...

如果用户决定,php 不应该真正依赖 $_SESSION 或 cookies登录 Facebook 后访问您的页面应用程序中,php 需要刷新页面才能从会话或 cookie 中确定它们不再位于 Facebook 中。

经过思考:

所有这些信息都应该位于 Facebook SDK 上,因为管理重定向和应用程序检测对于 Facebook 可怕的文档来说是一场噩梦。

希望这对您有帮助:)

Well if the user is outside of Facebook this bit of script before the body html tag should redirect them back to your page on Facebook:

<script language="JavaScript" type="text/javascript">
<!--
if (self == top) {
    window.location = "http://apps.facebook.com/YOUR_APP_PAGE";
}
-->
</script>

remember to change the 'YOUR_APP_PAGE' bit to something like:
'my-application?app_data=page-location'

you can send the request ?app_data to your Facebook page using php and append the page that your website was redirected from so that the app_data can tell your app to load this page but within Facebook.

So it is worth looking up Facebook app_data

If you want to change the style of your page depending if it is displayed on Facebook or not then use this:

<script language="JavaScript" type="text/javascript">
<!--
if (window.self = "http://apps.facebook.com/") {
    var element = document.getElementById('html');
    element.className = "facebook"; 
}
-->
</script>

and modify your html tag with the id=html like so:

<html id="html" xmlns:fb="http://www.facebook.com/2008/fbml">

this will allow you to use a class name .facebook remap any style for your page that you like.

If you need to set some initial php settings like the redirect page, then you can use this code in php to detect if you are within Facebook, however this code can not detect if the user is on Facebook or not after they have logged in:

if(!empty($_POST['signed_request'])){
//do something with php here...
}

Note:

It is unlikely the Facebook user on your app page has JavaScript turned off which is why we can use the above php code to set redirects etc...

php should not really rely on $_SESSION or cookies for this in case the user decides to visit your page having logged in to your Facebook application, it would take a page refresh for php to determine that they are no longer in Facebook from the session or cookie.

After thought:

All this information should be on the Facebook SDK's as managing redirects and application detection is a nightmare with Facebook's horrific documentation.

Hope this helps you out :)

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