2

私は現在 (幸いなことに) jquery を使用して、IE 以外のブラウザーで ajax 要求関数を window.onpopstate イベントにバインドしています。ただし、IE がdoAjax機能にヒットすることはありません。

    // Bind a function to the popstate event to execute ajax requests
    // this allows request to occur on back/fwd browser navigation 
    window.onpopstate = doAjax;

IE 8/9 をうまく動作させる方法があるかどうか知っている人はいますか?

4

4 に答える 4

9

私が到達した解決策は、onpopstateonhashchange目的のハンドラーの両方をバインドすることです。

    // Popstate: load ajax
    window.onpopstate = handlePageWipe;

    // And onhashchange for IE
    if( jQuery.browser.msie ) window.onhashchange = handlePageWipe;

ページにajaxの変更を加えるときに、Historyjqueryライブラリを使用してURLを更新しています。残念ながら、そして予想通り、IEは追いついておらず、JSでURLを変更する方法はないようです。履歴はIEでのURLのハッシュ状態の更新にフォールバックするため、これはURL状態の変更をIEのハンドラーにバインドするという私の最初の目標に役立ちます。

もちろん、これにより、URLの変更とハッシュの変更の両方を処理する必要があるため、ワームの別の缶が開かれます。ああ、そうですね...

編集: @linusが指摘しているように、IEに改革の機会を与えるには、慈善活動を行い、ブラウザの検出を回避する必要があります。

于 2012-07-13T15:34:16.987 に答える
3

私はこのようにしたいと思います:

if (window.onpopstate != undefined) {
    window.onpopstate = locate;
} else {
    window.onhashchange = locate;
}

したがって、「msie」がこの機能を追加すると、古いコードに依存しなくなります

于 2014-09-26T08:53:22.357 に答える
1

私はjQuery history pluginを使用するプロジェクトに参加しており、著作権は三輪貴之が所有しています。クライアント コードは、ライブラリを で初期化します$.history.init(callback, ...)
そのコールバックは、ページに移動/ページを更新するたびに呼び出されます。また、ページのコンテンツが AJAX によって更新されるたびに、クリック、履歴バック、履歴フォワードのいずれであっても呼び出されます。

同じライブラリを使用している場合は、ページのコンテンツが変更されたときにコードを呼び出すために同じことを行うことができ、onpopstate/onhashchange を削除できます。

BA Luptonプラグインの最新のHistory.jsstatechangeを使用している場合は、バインドできるイベントがあります。

また、onhashchangeIE8 から「のみ」サポートされていることにも注意してください。
HTH

于 2012-09-06T13:37:45.953 に答える
0

これは私を解決しました:

if( navigator.userAgent.toLowerCase().indexOf('msie ') ) window.onhashchange = 場所を特定する else window.onpopstate = 場所を特定する

于 2014-08-09T18:59:27.093 に答える