У меня есть веб-страница с 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, чтобы удалить обработчик, поэтому я должен принять это во внимание.
Спасибо!