newWind.onunload = function() { alert('test'); }
IE по какой-то причине не позволит вам назначить функцию из одного контекста окна для другого окна при [до] выгрузке. Вы можете назначить стороннюю функцию другим обработчикам событий, включая newWind.document.body.onunload
, но это не очень хорошая идея.
Во-первых, поскольку сборка мусора в IE основана на окнах, поэтому при закрытии или перемещении по открывающему окну всплывающее окно будет пытаться выполнить неработающую функцию или функцию с мертвыми переменными в области видимости, что приведет к странным ошибкам JavaScript.
И, во-вторых, потому что вы не знаете из открывателя, когда всплывающий документ загружен достаточно, чтобы можно было установить обработчик. В момент сразу после вызова open
всплывающий документ может вообще не начать загрузку, и в этом случае вы не можете безопасно установить на него какие-либо обработчики событий. Таким образом, вам потребуется небольшая задержка перед установкой обработчика onunload, и пользователь может закрыть окно в это время. И новичок не знает, как долго задерживаться; вместо этого, дочерний диалог должен был бы перезвонить родителю, чтобы сказать, что он готов. Лучше, чтобы всплывающее окно ребенка отвечало за получение его собственных событий и звонило новичку, чтобы сообщить ему о них.
Скриптовое окно имеет бесконечные подводные камни. Старайтесь избегать этого везде, где это возможно. Для диалогов всегда используйте элементы на странице, которые намного более надежны и менее раздражают, чем всплывающие окна.