Почему открытые окна запускают событие onload только один раз? - PullRequest
1 голос
/ 11 мая 2011

Я искал ответ на свою проблему - пока безуспешно.

Вот мой код:

var oNewWindow = window.open(sLink,'_blank');
oNewWindow.addEventListener('load',function() { alert('Page loaded'); }, false);

Когда открывается всплывающее окно / вкладка, обработчиквызывают, но если я просматриваю во всплывающем окне, обработчик никогда не вызывается.Зачем?И есть ли способ заставить его работать?

Основная идея состоит в том, что пользователь открывает всплывающее окно, а затем начинает просмотр во всплывающем окне, в то время как код в родительском окне продолжает работать и отслеживает, что происходит во всплывающем окне.,Страница всплывающего окна - это страница в том же домене.

После первой загрузки всплывающего окна я прикрепил к нему обработчик onunload, который будет вызывать обработчик в родительском окне, а затем таймер будетНачните.Тогда скрипт родительского окна будет работать с содержимым всплывающего окна.Однако проблема возникает с задержкой: если таймер заканчивается, а старая страница во всплывающем окне все еще там, я получаю неверные данные, и весь мой сценарий останавливается.После этого я не могу подключить другой обработчик onunload.

Обработчик onload установлен для всего окна, а не для документа внутри окна, так почему не вызывается обработчик?

Также мой скрипт запускается с помощью GreaseMonkey.Мне не нужно, чтобы это был кросс-браузер, так как я работаю только с Firefox.

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

Причина в том, что когда браузер переходит на новую страницу, для этой страницы инициализируется новый объект window.Это может сбивать с толку, но лучше думать, что объект window не связан с окном, принадлежащим процессу, запущенному в вашей операционной системе.

Подводя итог, можно сказать, что любые отношения между родительским окном и открытымокно теряется после навигации.

2 голосов
/ 11 мая 2011

Как только пользователь уходит с этой исходной страницы, в открывшемся окне больше нет события load, применяемого открывающимся окном, поэтому это оповещение больше не срабатывает.

Один из подходов, который вы могли бы использовать, - это создать страницу, которая оборачивает нужный URL-адрес в iframe (www.mypage.com/myframe?url=someurl.com), чтобы страница в дочернем окне не изменялась, а содержимое iframe менялось. Отсюда вы можете window.opener сказать, что происходит внутри iframe.

0 голосов
/ 12 мая 2011

Другой альтернативой будет вставка блока скрипта в дочернее окно, которое затем будет выполнять присоединение события «load».

Таким образом, оно становится полностью независимым от родительского окна.

...