2011-12-08 5 views
1

進化するHTML5標準hereで指定されたSafariとChrome(そして、すべてのWebkitブラウザ)は、window.history.stateに対応せず、Firefoxに実装されています。Webkitのwindow.history.stateオブジェクトを読む

それを読むための回避策はありますか?おそらく、ポップステートイベントをコード内でトリガし、イベントハンドラから状態を返すことは可能でしょうか?

答えて

2

window.history.stateは、現在、WebKitのbroswersに実装されていません。それにはrequestがありますが、それまでの実装段階はありませんでした。

クロス互換履歴管理の経験を提供することを目指しているhistory.jsと呼ばれるプロジェクトがあります。

History.jsは優雅にすべてのブラウザでHTML5歴史/ステートAPIを(pushState、replaceState、onPopState)をサポートしています。データ、タイトル、replaceStateを引き続きサポートします。 jQuery、MooTools、Prototypeをサポートしています。 HTML5ブラウザの場合、これはハッシュを使わなくてもURLを直接変更できることを意味します。 HTML4ブラウザの場合、古いonhashchange機能を使用するように戻ります。

このプロジェクトから、History.getState()は要求されたようです。

+0

感謝を!以前はHistory.jsを見ていましたが、残念ながらそれをサポートしていないブラウザではwindow.history.stateを有効にしていないようです。 – Trott

+0

@Trott: 'History.getState()'はあなたがそのライブラリで何を探していますか?私はそうだと思いました :-/。 – kubetz

+0

どのように私はそれを逃したのですか?あなたは絶対に正しいです! – Trott

4

私は昨日、この問題に遭遇しました。私は、WebKitののやや古いバージョンを実行しているターゲットプラットフォーム以来、クロスブラウザのソリューションを必要としなかったので、私はWebKitの中でhistory.stateのために迅速かつ簡単ポリフィルを作成しました:

// Polyfill for history.state in older webkit engines 
if (!history.hasOwnProperty('state')) { 
    (function (push, rep) { 
     // history.state is always initialised to null 
     history.state = null; 

     history.pushState = function (state) { 
      push.apply(history, arguments); 

      history.state = state; 
     }; 
     history.replaceState = function (state) { 
      rep.apply(history, arguments); 

      history.state = state; 
     }; 

     window.addEventListener('popstate', function (e) { 
      history.state = e.state; 
     }, true); 

    })(history.pushState, history.replaceState); 
} 
+0

本当にhistory.jsを試してください – danger89

関連する問題