我有一个带有iframe的网页(我不喜欢它,但这就是它必须的方式)。它不是跨域iframe,所以没有什么可担心的。
我编写了一个jQuery扩展,它根据iframe父级的宽度和高度对ModalPopup(从重写的 AjaxControlToolkit.ModalPopupBehavior._layout 方法调用)进行居中,以便它看起来居中,即使iframe不在页面的中心。这是很多棘手的事情,特别是因为网页我添加了iframe以怪癖模式运行。
现在,我还重写了 AjaxControlToolkit.ModalPopupBehavior._attachPopup ,这样当父窗口调整大小或滚动时,iframe重定位器内部的ModalPopup相对于父窗口的新大小。但是,将弹出窗口附加到父窗口的 resize 事件的相同代码不适用于父窗口的滚动事件。请参阅下面的代码和评论:
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;
}
有人可以向我解释为什么resize事件有效而滚动事件没有?有什么建议或替代方案可以帮助我吗?我正在使用jQuery,所以如果我可以使用除MS的$ addHandler方法之外的东西,那就没事了。请注意,我还必须覆盖_detachPopup函数以删除处理程序,因此我需要考虑到这一点。
谢谢!
答案 0 :(得分:1)
没关系,怪癖模式再次咬我。从父级获取scrollTop位置失败,因为它的documentElement不存在。我换了
$(top.window.document.documentElement).scrollTop();
到
$(top.window.document.body).scrollTop();
在我的jQuery扩展中心代码中,它现在很高兴。