什么是新的SDK等同于FB.Facebook.get_isInCanvas

时间:2012-01-05 18:16:44

标签: facebook facebook-javascript-sdk facebook-php-sdk

试图找到相当于:

的新Facebook javascript sdk
FB.Facebook.get_isInCanvas

此调用是否也有PHP SDK方式?

我需要测试是否在画布内,并且标题检查和signed_request检查不确定用户是否在应用程序内的Facebook上...除非我没有正确的检查方式...

2 个答案:

答案 0 :(得分: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

<强>更新 较新版本是:

((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))

答案 1 :(得分:0)

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

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

<强>更新
刚刚检查过,JS-SDK中有一个更好的选项来检查你是否在画布上运行,但我不确定这种行为将来不会改变。你可以使用这样的东西:

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