Помогите мне перецентрировать ModalPopup внутри iframe, когда прокручивается родительское окно iframe - PullRequest
2 голосов
/ 01 мая 2009

У меня есть веб-страница с iframe (мне это не нравится, но так оно и должно быть). Это не междоменный iframe, поэтому не о чем беспокоиться.

Я написал расширение jQuery, которое выполняет центрирование ModalPopup (который вызывается из переопределенного AjaxControlToolkit.ModalPopupBehavior._layout метода) на основе ширины и высоты родительского элемента iframe, чтобы оно выглядит по центру, даже если iframe находится не в центре страницы. Это много хитрых вещей, тем более что на веб-странице я добавил iframe для работы в режиме причуд.

Теперь я также переопределил AjaxControlToolkit.ModalPopupBehavior._attachPopup , так что когда размер родительского окна изменяется или прокручивается, ModalPopup внутри iframe получает сам себя относительно нового размера родительского окна. Однако тот же код, который присоединяет всплывающее окно к событию resize родительского окна, НЕ работает для события scroll родительского окна. Смотрите код ниже и комментарии:

AjaxControlToolkit.ModalPopupBehavior.prototype._attachPopup = function() {
    /// <summary>
    /// Attach the event handlers for the popup to the PARENT window
    /// </summary>
    if (this._DropShadow && !this._dropShadowBehavior) {
        this._dropShadowBehavior = $create(AjaxControlToolkit.DropShadowBehavior, {}, null, null, this._popupElement);
    }
    if (this._dragHandleElement && !this._dragBehavior) {
        this._dragBehavior = $create(AjaxControlToolkit.FloatingBehavior, {"handle" : this._dragHandleElement}, null, null, this._foregroundElement);
    }        
    $addHandler(parent.window, 'resize', this._resizeHandler); // <== This WORKS
    $addHandler(parent.window, 'scroll', this._scrollHandler); // <== This DOES NOT work
    this._windowHandlersAttached = true;
}

Кто-нибудь может мне объяснить, почему событие изменения размера работает, а событие прокрутки - нет? Любые предложения или альтернативы, чтобы помочь мне? Я работаю с jQuery, так что если я могу использовать что-то кроме метода $ addHandler от MS, это было бы хорошо. Имейте в виду, что мне также необходимо переопределить функцию _detachPopup, чтобы удалить обработчик, поэтому я должен принять это во внимание.

Спасибо!

1 Ответ

1 голос
/ 01 мая 2009

Неважно, режим причуд снова меня укусил. Не удалось получить позицию scrollTop от родителя, потому что его documentElement не существует. Я переключился

$(top.window.document.documentElement).scrollTop();

до

$(top.window.document.body).scrollTop();

в моем коде расширения jQuery, и теперь он счастлив.

...