当iframe的父窗口滚动时,帮助我在iframe中重新定位ModalPopup

时间:2009-05-01 19:28:29

标签: jquery iframe modalpopupextender modalpopups microsoft-ajax

我有一个带有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函数以删除处理程序,因此我需要考虑到这一点。

谢谢!

1 个答案:

答案 0 :(得分:1)

没关系,怪癖模式再次咬我。从父级获取scrollTop位置失败,因为它的documentElement不存在。我换了

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

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

在我的jQuery扩展中心代码中,它现在很高兴。