Internet Explorer 11 でスクリプトの onload イベントが発生しないことがある


現象


Internet Explorer 11 の 戻るボタンを押してページを戻ると、戻り先ページの onload イベントが発生しないことがあります。

原因


"戻るナビゲーションキャッシュ機能" が有効なIEでは、メモリ上にコンテンツを保持しており、戻るボタン押下時にこのメモリからコンテンツを復元しています。このとき、ページの再解析は行われないため、スクリプトの解析や実行も行いません。このため、グローバルのスクリプトや BODYエレメントの onload イベントが発生しません。

解決方法


以下のいずれかの方法で回避できます。

1. onpageshow イベントを利用する。
"戻るナビゲーションキャッシュ機能" が有効なIEでは、戻るボタン押下時にonload イベントの代わりに onpageshow イベントが発生します。
そのため、onpageshow イベントを利用していただくことで回避できます。

2.  戻るナビゲーションのキャッシュ機能が働かないようにする。
戻るナビゲーションのキャッシュ機能が有効となる条件は、以下のとおりです。この条件を外していただくことで動作を回避できます。

* "インターネット" ゾーンで表示している。
* HTTP: プロトコルを使って表示される (HTTPS ページは、セキュリティ上の理由からキャッシュされません)。
* ページで beforeunload イベント ハンドラーが定義されていない。
* load イベントと pageshow イベントがすべて完了している。
* ページに次のいずれも含まれない。
  - indexedDB トランザクションが保留されている。
  - Web ソケット接続が開かれているか、アクティブである。
  - Web ワーカーが動作中である。
  - Microsoft ActiveX コントロール。* F12 開発者ツールのウィンドウが開いていない。

状況


この動作は仕様です。

詳細


戻るナビゲーションのキャッシュについては、以下の資料をご参考ください。

戻るナビゲーションのキャッシュ
http://msdn.microsoft.com/ja-jp/library/ie/dn265017(v=vs.85).aspx