2

我有一个带有 iframe 的网页(我不喜欢它,但它必须这样)。它不是跨域 iframe,因此无需担心。

我编写了一个 jQuery 扩展,它根据 iframe 父级的宽度和高度对 ModalPopup(从重写的AjaxControlToolkit.ModalPopupBehavior._layout方法调用)进行居中,因此即使 iframe 不在其中,它也看起来居中页面的中心。这是很多棘手的事情,特别是因为我添加了 iframe 以在 quirks 模式下运行的网页。

现在,我还覆盖了AjaxControlToolkit.ModalPopupBehavior._attachPopup,这样当父窗口调整大小或滚动时,iframe 中心器内部的 ModalPopup 本身相对于父窗口的新大小。但是,将弹出窗口附加到父窗口的调整大小事件的相同代码不适用于父窗口的滚动事件。请参阅下面的代码和注释:

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,所以如果我可以使用除了 MS 的 $addHandler 方法之外的其他东西,那很好。请注意,我还必须重写 _detachPopup 函数以删除处理程序,因此我需要考虑到这一点。

谢谢!

4

1 回答 1

1

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

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

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

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

于 2009-05-01T19:43:45.413 回答