2012-01-18 12 views
1

私はこのURLから自分のアプリケーションのすべての親ウィンドウを強制したい:これに http://apps.facebook.com/app_name/https://apps.facebook.com/app_name/すべてのhttpをhttpsのFacebookページにリダイレクトする方法はありますか?

(のhttpをhttps)

私はこれをどのように行うことができますか? ありがとう!

あなたがこの(これは signed_requestせずにアプリケーションを残すことを警告する)のようなものを使用することができます

答えて

1

:あなたが親フレーム(フェイスブック自体が)だけでなく、あなたよりもHTTPSに切り替えることにしたいならば

if (document.location.protocol=='http:'){ 
    document.location.protocol = 'https:'; 
} 

を「アプリケーション内のページのURLを知っている必要がありますでしょう:

if (document.location.protocol=='http:'){ 
    window.top.location = 'https://YOUR_APPLICATION_PAGE_URL' 
} 

あなたはおそらく、あなたのアプリケーションのためのURLパターンを知っていて、を知っていますかそれのので、このような何か合うことがあります。

if (document.location.protocol=='http:'){ 
    var applicationUrl = 'https://facebook.com/example-application'; 
    var canvasURL = 'http://example.com/facebook-canvas'; 
    var currentAppPageUrl = (document.location+'').replace(canvasURL, applicationUrl); 
    window.top.location = currentAppPageUrl; 
} 
+0

私は "window.top.location"、 を取得しようとしましたが、私はfacebookがそれを得ることができないと思います。 –

+0

これは、Facebookのクロスドメインポリシーとは関係ありません。一言で言えば、あなたはそれを設定するためにwindow.top.locationを取得することはできません! –

+0

私はこのコードを試しました: '

' if (document.top.protocol=='http:'){ \t \t var applicationUrl = 'https://apps.facebook.com/app_name'; \t \t var canvasURL = 'https://www.app_name.com'; \t \t var currentAppPageUrl = (document.location+'').replace(canvasURL, applicationUrl); \t \t window.top.location = currentAppPageUrl; \t } '
' それは仕事ではありません。 –

0

キャンバスアプリがあなたのドメインと一番上にあるので、Facebookのキャンバスアプリ内のwindow.top.locationを呼び出すと、インラインフレームからのクロスドメインのURLへのアクセスが発生し、Facebookのドメインです。

try catchブロックで例外をキャッチするだけで済みます。

if (document.location.protocol=='http:'){ 
    var applicationUrl = 'https://facebook.com/example-application'; 
    var canvasURL = location.protocol+'//'+location.host+location.pathname; 
    var currentAppPageUrl = (document.location+'').replace(canvasURL, applicationUrl); 
    try { 
     window.top.location = currentAppPageUrl; 
    } catch (e) { 
    } 
} 
関連する問題