問題は、サーバー#!
があなたの居場所を特定する必要がある場合でした(数年前のTwitter / Gawker)。サーバーを正しく設定した場合、つまり、常にバックボーンアプリを返し、アプリ内の任意のURLに対してルーターを起動すると、すべてのユーザーに対して正しく処理されます。
IE8 / 9ユーザーには、ハッシュ化されたURLが表示されます。正常なブラウザは通常のURLを表示します。「正常な」ブラウザがハッシュされたURLをロードすると、バックボーンルーターは何をすべきかを認識します。同じことがIE8/9にも当てはまります。
また、サーバーから特定のURLの正しいビューステートを返す(つまり、サーバー側での事前レンダリング)限り、Googleは、通常のWebサイトのようにサイトを使用し、それに沿ってインデックスを作成するだけで問題はありません。
この問題は#!
、_escaped_fragment_
実際に処理するように設計されているため、もはやそれほど重要ではありません。
編集
例:
サーバーでBackboneアプリを実行していて、それがにあるとしますhttp://myserver.com/myapp/
。これは、Backbone.historyオブジェクトに渡すベースです。
Backbone.history.start({pushState: true, root: '/myapp'});
これは、下のすべてのパス/myapp/
がバックボーンアプリケーションによって「所有」されていることをルーターに説明します。で始まる要求されたルートがバックボーンアプリケーションを返す限り/myapp/
、ブラウザーに関係なく機能します。
つまり、ユーザーがアプリを使用していて、最終的には。になるとし/myapp/awesome/thing/to/share
ます。IE8 / 9ユーザーの場合、URLはになります/myapp#awesome/thing/to/share
。
ブラウザがサーバーにこれを要求すると、要求するだけです/myapp
。これにより、バックボーンアプリケーションが返され、履歴オブジェクト/ルーターが起動します。ルーターはハッシュフラグメントがあることを確認し、「ユーザーにawesome / things / to/shareを提供します」と言います。これは、このURLを要求するすべてのブラウザで発生します。
サーバーが同じバックボーンアプリを返す限り、IE8 / 9ユーザーがリクエスト/myapp/awesome/thing/to/share
すると、ルーターはパスが/ awesome / things / to / share'であることを再度確認し、IE8/9のURLを自動的にに変更します/myapp#awesome/thing/to/share
。
あなたが何かトリッキーなことをする必要がある唯一の場所は、グーグル/フェイスブックがこのページをこすり落とすことができるようにしたい場合です。JavaScriptを実行しないため、ページは、Backboneがブラウザで作成した場合とまったく同じようにサーバーから送信する必要があります。または、Facebookの場合は、ドキュメントのセクションで<og:*>
タグを使用できます。<head>