2012-01-05 5 views

答えて

0
...私はキャンバスの内側かどうかをテストする必要があり、ユーザーがアプリケーション内でFacebookを利用している場合、私はチェックの正しい方法を持っていない場合を除き、ヘッダチェックとsigned_requestチェックは...決定しません

$_REQUEST/$_POSTsigned_requestがある場合、PHP-SDKを使用してキャンバス内でアプリケーションを実行することができます。 ...ではない、完全に安全ではなく、ほとんどの場合、それを想定しても大丈夫かもしれ

あなたがキャンバスにいる知っておく必要がある場合はJS-SDKは、それだけではない非常に便利window.top == windowをチェックすることにより、確実にキャンバスに動作していないと言うことができます誰かのフレームだけではありません。

更新:
ちょうどチェックし、あなたがキャンバスに実行されているかどうかを確認するためにJS-SDKでより良いオプションがありますが、私は、この動作は、将来変更されませんわかりません。あなたはこのようなものを使用することができますので、彼ら自身がチェックを行うとコピー方法を確認することができます時々、常にセットではありません

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

PHP SDKについては、私がFacebook上のアプリケーションの内側とその外側にある新しいタグでWebサイトを訪れているときにsigned_requestパラメータが返されます。あなたが別のタブでアプリケーションにログインしている限り、$ facebook-> getSignedRequest()を使うことはFacebookの外で働いています....だから、ユーザーがFacebook Canvasの中にいることをPHP経由でチェックするにはどうすればいいですか? – chuuke

+0

私は$ _REQUESTを使うことができましたが、それはページ間で落ちます。セッション変数として保存することもできますが、ユーザーが新しいタブでアプリの外でウェブページを開いた場合でもセッションは有効です。どのようにキャンバスの内部にあるかどうかを確認する簡単なチェックはありませんか? – chuuke

+0

'$ _REQUEST'はほとんどの場合PHPの設定に応じて' $ _COOKIES'の 'signed_request'によって生成されます。 '$ _POST'はここで安全です。それは常にキャンバスに配置されます –

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)) 
関連する問題