5

SPA にルーティングを使用していますAngularjsが、IE7 (および IE7 互換モードの IE8) をサポートする必要があります。ただし、ブラウザの履歴は引き続き機能する必要があります。jQuery プラグインを使用する必要があるかどうかは気にしません。

4

1 に答える 1

7

アンギュラーソースのsniffer.jslocation.jsbrowser.jsを調べて、履歴がどのように機能するかを確認しました。要するに、ブラウザーが履歴をサポートしている (つまり$sniffer.historytrue) 場合は履歴 API が使用され、それ以外の場合は単にlocation.href(またはlocaiton.replace(url)) に書き込みます。$browser.url(url, replace)詳細については、browser.jsの 149 行目を確認してください。

したがって、angular が単に書き込みを行っている場合、 Ben AlmanBBQlocationなどの jquery プラグインは location.hash への変更をポーリングしているため、このイベントを取得します。Ben のhashchange プラグイン(BBQ のサブセット)を含めるだけで、IE8 (IE7 モード) でこれを正常に機能させてから、最小限のイベント ファイアとイベント リッスンを行いました。

$(function () {
  $(window).hashchange(function() {
    // don't delete this empty handler or ie6/7 history won't work.
  });
  // call hashchange on first load
  $(window).hashchange();
});

注: jQuery hashchange (および BBQ) は300 行$.browser.msie目で非推奨を使用しているため、代わりに Ben のブログ投稿へのコメントで提案されているように使用してください。(document.documentMode != undefined)

于 2013-06-20T11:01:20.510 に答える