Я столкнулся со странным сценарием, в котором window.open() не запускает событие «загрузка», если фактическое окно уже находится на экране.
Краткий обзор
У меня есть кнопка, при нажатии которой запускается некоторый javascript и открывается страница в новом окне. Стандартный код, который видел любой JS-разработчик. Когда вызывается метод (часть большего класса), он проверяет, есть ли ссылка на окно (this.preview_window). Если это так, он запустит this.up и попытается открыть его снова. Как только он открыт, он запускает метод обновления в этом окне.
Проблема
Если окно не существует, все работает как положено. Если окно существует, но у класса нет ссылки на него, то ссылка успешно получена с помощью window.open(), однако функция обновления не вызывается.
Соответствующий код
// This code is run whenever there is no reference to the window
this.preview_window = window.open('/folder/page.php','page_previewer');
Event.observe(this.preview_window, 'load',this.update.bindAsEventListener(this));
Остальной код был тщательно протестирован, поэтому я вполне уверен, что что-то упустил в том, как работает событие загрузки. Функции window.open() и update() работают должным образом во всех случаях, кроме этого.