1

hashchange ハンドラー イベントをリッスンするために使用します。しかし、HTML5 では、ハッシュを使用せずに URL を変更できます。URL の変更にリスナーを追加するにはどうすればよいですか?

4

1 に答える 1

1

ハッシュ変更は、JSを使用しなくても発生する可能性があります。アンカーリンクをクリックするデフォルトの動作と同様に、ハッシュ変更をトリガーできます。

HTML5履歴オブジェクトは、JSを介してのみ操作できます。このために、pushState()replaceState()があります。一度使用すると、ブラウザの前後のボタンがpopstateイベントをトリガーします。HTML5の履歴について私が知っているイベントハンドラーは他にありません。

$(window).bind("popstate", function() {
    console.log(window.location.href);
});

何かが状態を履歴オブジェクトにプッシュしているときにトリガーが必要な場合は、オブザーバー(コールバック)がそれを許可するために、これを呼び出している人に依存する必要があります。

そうでなければ、それほど堅牢ではない何かを試すことができます:

function onPushState(callback) {
    (function(pushState) {
       history.pushState = function() {
           pushState.apply(this, arguments);
           callback.apply(window, arguments);
       };
    })(history.pushState);
}

onPushState(function() {
    console.log(window.location.href);
});

http://jsfiddle.net/Cxjey

状態の置換についても同じことができます。

繰り返しになりますが、デフォルトのブラウザの動作を変更しているため、これは適切なアイデアではない可能性があります。

于 2012-05-10T19:09:31.007 に答える