Как прикрепить события на window.opener - PullRequest
0 голосов
/ 23 мая 2011

У меня есть окно, которое открывается

var myWindow = window.open(
                  'popupManager.htm', 
                  'myWindow', 
                  'status=0,toolbar=0,width=500,height=100');

и он будет действовать как окно отладки.

внутри Я хочу подключиться к событиям Windows на window.opener, и у меня это не работает. Оба URL находятся в одном домене / на одном веб-сайте.

Я могу подключиться к элементам DOM, используя, например,

$("input[soid=DlgButtonBar_cancelButton]", window.opener.document).bind("click", function() {
    alert('Cancel button was pressed!');
    window.close();
});

но я хочу подключиться к событиям move (window.onMove) и close.

попробовал

window.opener.addEventListener('move', function() { console.log('moving...'); });

без удачи.

что за хитрость? с использованием jQuery или простого javascript ...

1 Ответ

0 голосов
/ 21 ноября 2011

Кажется, что прослушивание оконных событий не работает.Я использую этот трюк для прослушивания событий window (unload в моем случае):

  1. Создание элемента документа (например, span) в родительском документе (например,вы хотите получать события от):

    var $unloader = $('<span style="display:none;" id="unloader"></span>');
    $('body').prepend($unloader');    
    $(window).unload(function(){$('#unloader').click();});
    
  2. В открытом документе (например, всплывающем окне) вы можете прослушать событие unload , теперь маскируемое как click event:

    $("#unloader",window.opener.document).click(unloadEventHandler);
    

Если вам нужно определить, является ли unload закрытием или событием навигации, вы можете проверить закрытоесвойство для родителя после задержки:

    window.setTimeout(function(){
        if(window.opener.closed == true) {
             // Close event
        } else {
            // Navigation event
            // window.opener.location to get new location
        }
    },500);

Риск заключается в задержке, свойство closed изменяется после выполнения методов выгрузки и перехватчиков событий, поэтому если задержка слишком великаКороче говоря, вы можете получить флаг до того, как он будет изменен, и если он слишком длинный, вы получите ненужные задержки.

Я думаю, что событие move может быть обработано аналогичным образом, надеюсь, это поможет.Дайте мне знать, если есть какие-либо возможные улучшения этого метода.Спасибо и удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...