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