2011-07-26 10 views
9

私はbackbone.js 0.3.3を使用しているFacebookアプリを開発中で、バックボタンをユーザーに適切に働かせようとしています。backbone.js Facebookアプリ(iframe内)でヒストリー状態を追加

バックボーンは、内部ルーティングを実行するために使用されるURLハッシュを通じて状態を保存します。たとえば、#homeはホームページを読み込み、#sessionは別のページです。履歴がiframeの外側で発生すると履歴が保存されるため、戻るボタンを使用して正しくナビゲートできます。

iframe内のナビゲーションは問題ではなく、すべてのリンクは機能しますが、ブラウザによって履歴は保存されません。

質問:http://app.example.comから

Facebookのiframeのポイント、バックボーンアプリケーションです。 バックボタンをFacebookアプリケーションのユーザーに使用させるにはどうすればよいですか?バックボーンを使用する既存ソリューションのボーナスポイント。


私はいくつかの角度からこの問題を検討しており、どこでも利用可能な満足のいく解決策を見つけることができません。非常にFacebookアプリがバックボーンを使用している/ Javascriptにあまり依存していないようです。

私は解決策はiframeの親ウィンドウにヒストリ状態を追加することだと思いますが、その方法はわかりません。 HTML5の履歴ですか? Facebook APIのいくつかの並べ替え?現在の状況よりも部分的な解決策(現代のブラウザの場合)が好ましい。

+0

iframeのURLが実際にユーザーのナビゲーション中に '#home'のようなハッシュを持っているかどうか確認しましたか? iframeでは、Facebookが多くのJavaScript APIをハイジャックしているため、window.locationがハイジャックされているかどうかはわかりません。 –

+0

@Cat Chen:iframeの 'src'属性が' javascript: "" 'に設定されていて、Chrome開発コンソールを使用してiframeの実際のURLを見つけるのに問題があります(クロスドメインポリシーが原因だと思います) 。 – Wylie

+0

私は参照してください。私は説明をしています(私の答えを見てください)、私はまだ解決策がありません。 –

答えて

3

あなたのFacebookアプリケーションは、彼らがCanvasと呼んでいるサンドボックスにあると思います。それはサンドボックスなので、あなたのウェブサイトのソースコードを含む直接のiframeではありません。事実、Facebookはあなたのウェブサイトからソースコードを読み込み、それをサンドボックスに入れて、iframeにサンドボックスをレンダリングします。

これが本当かどうかはわかりません。古いFacebookアプリケーションでは、このサンドボックス内で多くのJavaScript APIがハイジャックされています。たとえばdocument.getElementByIdはオリジナルではありませんdocument.getElementByIdそれはサンドボックス内の要素のみを取得できる他のものです。彼らはあなたが期待するように動作するが、サンドボックスの外のどこにでもアクセスする能力を持たない、ほとんどすべてのJavaScript APIを使用するようにします。

1つの問題は、元のウィンドウのモーションを模倣しないということです。私はそれがあなたの範囲外でなければならないと考えているからだと思います。アプリケーションはキャンバス(サンドボックス)に存在し、サンドボックスはiframeに存在します。したがって、iframeはあなたの手の届かないところになければなりません。

Facebook CanvasでヒストリカルAPIのサポートを実装することについてこれまでのところ考えていません。ページ全体がFacebookによってハイジャックされ、Facebookのドメインに何も置くことができないため、あなたのページは実際にあなたが制御できないドメインにあります。このような状況では、これまで可能な解決策は考えられません。

+0

これは良い説明です。これは私が知っていたものではありませんが、歴史が保存されない理由を説明する可能性があります。私はまだ歴史を持つことができる解決策が欲しいですが、不可能な場合は、Facebookが制限する機能を追加しようとしなくなります。 – Wylie

+0

キャンバス内にiframeを置くことはできますか?可能であれば、そのiframeで履歴を記録しようとすることができます。 –

+0

@ジェフ:あなたは詳しく説明できますか? iframeのドメイン間の制限についてはわかっていますが、多くの場合、iframeは履歴を保存できます。 – Wylie

関連する問題