2

iframe を含む Web ページがあります (好きではありませんが、そうあるべきです)。クロスドメインの iframe ではないので、心配する必要はありません。

iframe の親の幅と高さに基づいてModalPopup (オーバーライドされたAjaxControlToolkit.ModalPopupBehavior._layoutメソッドから呼び出される) の中央揃えを行う jQuery 拡張機能を作成しました。ページの中央。特に、iframe を追加した Web ページが 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

気にしないで、癖モードがまた私を噛んだ。documentElement が存在しなかったため、親から scrollTop の位置を取得できませんでした。切り替えました

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

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

私のjQuery拡張機能センタリングコードで、今は幸せです。

于 2009-05-01T19:43:45.413 に答える