2012-01-05 106 views
0

试图找到新的Facebook的JavaScript SDK相当于:什么是新的SDK相当于FB.Facebook.get_isInCanvas

FB.Facebook.get_isInCanvas 

是否有此调用PHP SDK的方式呢?

我需要测试,如果画布里面,头检查和signed_request检查并不确定用户是否是Facebook上的应用程序中...除非我没有检查的正确方法...

回答

0

如果您的$_REQUEST/$_POST中有signed_request,则可以使用PHP-SDK假定应用程序在画布中运行。没有完全安全的,但可能是确定假设它在大多数情况下...

JS-SDK可以说,它不是在画布上只有通过检查window.top == window不是非常有用的运行肯定,如果你需要知道你在画布上是而不仅仅是某人的框架。

更新:
刚才检查并且在JS-SDK更好的选择来检查,如果你在画布上运行,但我不知道这种行为不会在将来改变。您可以使用这样的事情:

var pageInfo = FB.Canvas.getPageInfo(); 
var isInCanvas = (pageInfo && pageInfo.clientWidth == 0); 
+0

至于PHP SDK,我得到了signed_request参数,当我在Facebook上的应用程序内部以及在它​​之外,只是在新标签页中访问网站时返回。只要您在单独的选项卡上登录到应用程序,就可以使用$ facebook-> getSignedRequest()在Facebook之外工作....那么,如何通过PHP检查用户是否位于Facebook Canvas中? – chuuke 2012-01-05 19:15:33

+0

我可以使用$ _REQUEST,但随后会逐页下降。我可以将它作为Session变量存储,但如果用户在新选项卡中打开了应用程序之外的网页,则会话仍然有效。怎么没有一个简单的检查,看看你的画布里面? – chuuke 2012-01-05 19:46:46

+0

'$ _REQUEST'将在大多数情况下由'$ _COOKIES'中的'signed_request'填充,具体取决于您的php设置。 '$ _POST'在这里更安全。它将始终填充在画布中 – 2012-01-05 19:49:49

1

FB._inCanvas是你从Facebook的JS SDK想要的东西不过,我发现有时并不总是设置成让我们看看他们自己怎么做的检查和复制:

var _inCanvas: (
    (window.location.search.indexOf('fb_sig_in_iframe=1') > -1) || 
    (window.location.search.indexOf('session=') > -1) 
); 

https://github.com/facebook/facebook-js-sdk/blob/master/src/core/prelude.js#L71

UPDATE 这样做的较新版本是:

((window.location.search.indexOf('fb_sig_in_iframe=1')>-1)|| 
(window.location.search.indexOf('session=')>-1) || 
(window.location.search.indexOf('signed_request=')>-1) || 
(window.name.indexOf('iframe_canvas')>-1) || 
(window.name.indexOf('app_runner')>-1))