1. ホーム
  2. asp.net

[解決済み] Internet Explorerの "n items remaining "問題を解決する方法をご存知の方はいらっしゃいますか?

2022-02-25 18:28:45

質問

私のASP.Netアプリケーションは、javascriptとjQueryを多用していますが、マスターページと.Net Ajaxの断片も使用しており、IE 6(時にはIE 7)のステータスバーには常に、「残り2アイテム」「残り15アイテム」というメッセージと「ロード中」というメッセージが表示されます。 グラフィックファイル.png|gif ." このメッセージは決して消えることはなく、ページの機能の実行を妨げるかもしれませんし、妨げないかもしれません(確かに停滞するようですが、私は肯定的ではありません)。

.aspxの年齢を更新するだけで、99%の確率でこの現象が起こりますが、アイテムの数や、時には言及するファイルが異なります。通常、2、3、12、13、または15です。

ググってみると、いくつかの提案や解説がありますね。そのうちのいくつかは私たちのために動作していませんし、他のものは私たちが実装したり試したりするために実用的ではありません。

以下はその考え方・理論です。

  • IEは画像を正しくキャッシュしていないため、画像がページ上で繰り返されている場合、同じ画像を繰り返し要求し、サーバーはそのページコンテキストですでに画像を提供しているため、ローカルにキャッシュされているはずだと思い込んでしまうのです。IEは画像を正しく表示しますが、サーバーからの応答が来るのをじっと待ちます。通常、サーバーが待機していると言っているファイルは、ページ上で繰り返されています。

  • このページでは、透過性のあるPNGグラフィックスが使用されています。確かにそうですが、これはjQuery-UI Themerollerが生成したグラフィックで、jQuery-UIの人たちによるとIEセーフだそうです。PNGを使用しているのはjQuery-UIコンポーネントだけです。PNGの参照はすべてCSSで行っているので、ご参考になれば。いくつかのグラフィックをPNGからGIFに変更しましたが、それはちょうど、「待機している somegraphicsfile.png と同じように somegraphicsfile.gif

  • CSS や JavaScript で画像が指定されているが、現在表示されていないもの(例えば display: none アイテム)に表示されている。これは かもしれません。 は事実ですが、もしそうなら、画像をプリロードすればうまくいくと思うのですが、今のところ、プリローダーを追加してもうまくいきません。

  • IISのキャッシュ・ポリシーがブラウザを混乱させている。もしこれが本当なら、マイクロソフトのブラウザに問題があるのはマイクロソフトのサーバーSWだけです(これは全く驚きません)。残念ながら、私はアプリをホストするIISの設定をあまりコントロールできないのです。

どなたかこれをご覧になり、対策方法を発見された方はいらっしゃいますか?特にjQueryとjQuery-UIを使用したASP.Netアプリケーションで?

アップデイト

少なくとも1つのページでは、jQuery-UIのDatepickerコンポーネントのセットアップをコメントアウトするだけで、問題は解消されるのだが、それですべてのページが修正されるとは思えない(少なくとも私は確信していない)。もしそれで直るなら、その機能が必要なので、プラグインを入れ替えなければならない。IE6/7でjQuery-UIに対するオープンな問題は今のところないようですが...。

アップデイト2

IISの設定を確認したところ、"enable content expiration"が ではない は、どのフォルダにも設定されています。その設定のチェックを外すことは、この問題を解決するための一般的な提案でした。

もう一つ、もっとシンプルなページで、一貫してエラーを発生させることができるものがあります。jQuery-UI 1.6rc6ファイルを使用しています(jQuery-UI 1.7.1も試しましたが、同じ結果でした)。問題は、jQuery-UI Datepickerを含むページを更新したときのみ発生します。Datepickerの設定をコメントアウトすると、問題は解消されます。以下は、私がこれを行ったときに気づいたことです。

  1. このページは常に "(1 item remaining) Downloading picture http:///images/Calendar_scheduleHS.gif" と表示されますが、再読み込みのときだけです。
  2. HTTPログを見ると、キャッシュを無視して、動的にオンになるたびにその画像をサーバーに要求していることがわかります。
  3. そのグラフィックに対するリクエストはすべて完了し、正しくグラフィックを返します。コード 200 や 304 (サーバーが IE にキャッシュされたバージョンを使用するように指示していることを示す) がついているものはありません。すべてのリクエストが完了したのに、なぜそのグラフィックで待機中と表示されるのか、私にはわかりません。
  4. ページには他に1つのグラフィック(UI PNGファイルの1つ)があり、コード304(Not Modified)となっています。HTTPトラフィックを何とか記録した別のページで、"2 items remaining"で、2つの異なるグラフィック ファイル(両方ともUI PNG)にも同様に304がありました(しかしどちらも"Downloading"としてリストされたものではありません)。
  5. このエラーは無害ではありません - ページが完全に応答していないのです。例えば、クライアント側のアクションを実行するはずのボタンの1つをクリックすると、ページがリフレッシュされます。
  6. ページから離れて戻ってきても、エラーは発生しません。
  7. スクリプトとスクリプトの参照をコンテンツの一番下に移動させましたが、この問題には影響しません。スクリプトはまだ$(document).ready()の中で動いています(どうしても必要なとき以外は毛嫌いして割り切れない)。

最終更新と回答

以下、たくさんの良い回答や提案がありましたが、どれもまさに私たちの問題ではありませんでした。最も近いもの(そして解決に導いたもの)は、長く実行されるJavaScriptに関するものだったので、私はそこに賞金を授与しました(私自身がそれに答えることもできたと思いますが、私はむしろ解決につながる情報に報いることを望みます)。

私たちの解決策はここにありました。ASP.Netのマスターページに含まれるスクリプトの$(document).readyイベントで作成される複数のjQueryUI datepickersを持っていたのです。このクライアントページでは、ローカルスクリプトの$(document).readyイベントには、特定の条件下でdatepickersを破壊するスクリプトがありました。以前のバージョンの datepicker には "disable" の問題があったため、"destroy" を使用する必要がありました。jQuery UI の最新バージョン (1.7.1) にアップグレードし、datepicker の "destroy"s を "disable"s に置き換えると、問題は解消されました (あるいはほとんどなくなりました。ページの読み込み中に高速に処理を行うと、"n items remaining" という状態を取得できることがあります。).

何が起きていたのか、私の仮説は次のようなものです。

  1. ページのコンテンツが読み込まれ、12個または のテキストボックスで、datepicker クラスを使用します。
  2. マスターページスクリプトは は、これらのテキストボックス上の日付ピッカーです。
  3. IEは、各リクエストをキューに入れます。 カレンダーグラフィック というのも、IE は 動的画像を適切にキャッシュする リクエストに対応します。
  4. リクエストが処理される前に クライアント領域スクリプトは そのため、このグラフィックは は不要になります。
  5. IE には、いくつかの という、孤立したリクエストになります。 をどうしたらいいかわからない。

解決方法は?

以前にも同じような問題がありました。それは、ページの途中で長く実行されるJSの断片が原因で、ブラウザはその実行が終わるのを待って、サイトの追加ファイルをダウンロードし終わるのです。

これはあなたの問題かどうかわからないが、同じような方法で現れていたのだ。