newWind.onunload = function() { alert('test'); }
IE では、何らかの理由で、あるウィンドウ コンテキストから別のウィンドウの on[before]unload に関数を割り当てることができません。を含む他のイベント ハンドラーに外部関数を割り当てることができnewWind.document.body.onunload
ますが、これはお勧めできません。
まず、IE のガベージ コレクションはウィンドウ ベースであるため、オープナー ウィンドウを閉じたりナビゲートしたりすると、ポップアップがデッド関数を実行しようとするか、スコープ内のデッド変数を使用して関数を実行しようとし、奇妙な JavaScript エラーが発生します。
2 つ目は、ハンドラーを設定するのに十分なほどポップアップ ドキュメントがロードされたときに、オープナーからはわからないためです。呼び出し直後の時点でopen
は、ポップアップ ドキュメントの読み込みがまったく開始されていない可能性があります。この場合、イベント ハンドラを安全に設定することはできません。そのため、onunload ハンドラーを設定する前に短い遅延が必要になり、その間にユーザーがウィンドウを閉じる可能性があります。そして、オープナーはどれだけ遅らせればよいかわかりません。代わりに、子ダイアログは親にコールバックして、準備ができていることを伝える必要があります。子ポップアップが独自のイベントを受け取り、オープナーを呼び出してそれらについて知らせるようにすることをお勧めします。
クロスウィンドウ スクリプティングには無限の落とし穴があります。可能な限り避けるようにしてください。ダイアログの場合、常にページ内要素を使用します。これは、ウィンドウ ポップアップよりもはるかに信頼性が高く、煩わしさがありません。