進化するHTML5標準hereで指定されたSafariとChrome(そして、すべてのWebkitブラウザ)は、window.history.state
に対応せず、Firefoxに実装されています。Webkitのwindow.history.stateオブジェクトを読む
それを読むための回避策はありますか?おそらく、ポップステートイベントをコード内でトリガし、イベントハンドラから状態を返すことは可能でしょうか?
進化するHTML5標準hereで指定されたSafariとChrome(そして、すべてのWebkitブラウザ)は、window.history.state
に対応せず、Firefoxに実装されています。Webkitのwindow.history.stateオブジェクトを読む
それを読むための回避策はありますか?おそらく、ポップステートイベントをコード内でトリガし、イベントハンドラから状態を返すことは可能でしょうか?
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()
は要求されたようです。
私は昨日、この問題に遭遇しました。私は、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);
}
本当にhistory.jsを試してください – danger89
感謝を!以前はHistory.jsを見ていましたが、残念ながらそれをサポートしていないブラウザではwindow.history.stateを有効にしていないようです。 – Trott
@Trott: 'History.getState()'はあなたがそのライブラリで何を探していますか?私はそうだと思いました :-/。 – kubetz
どのように私はそれを逃したのですか?あなたは絶対に正しいです! – Trott