2012-01-05 115 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))