web-dev-qa-db-ja.com

閉じるBootstrap= iframe内からモーダル

Twitterを開くページBootstrap内部にiframeを持つモーダル:

<div id="iframeModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="btn btn-danger pull-right" data-dismiss="modal" aria-hidden="true">Close</button>
        <div class="clearfix"></div>
    </div>
    <div class="modal-body">
        <iframe src="iframe-modal.html"></iframe> 
    </div>
    <div class="modal-footer">
    </div>
</div>

そして、このモーダルをiframe内から閉じる方法を探しています。例iframe-modal.html内のリンクをクリックして、モーダルを閉じます。私が試したが、成功しなかったもの:

$('#iframeModal', window.parent.document).modal('hide');
$('#iframeModal', top.document).modal('hide');
$('#iframeModal').modal('hide');
32
Constantin.FF

Bootstrapモーダルウィンドウを閉じるグローバルにアクセス可能な関数をいつでも作成できます。

例えば。

window.closeModal = function(){
    $('#iframeModal').modal('hide');
};

次に、iframeから、次を使用して呼び出します。

window.parent.closeModal();
59

問題は、jQueryイベントがjQueryの個々のページのインスタンスに登録されていることです。したがって、$('#iframeModal', window.parent.document).modal('hide');は、実際には親ドキュメントではなく、iframeのhideイベントをトリガーします。

これは動作するはずです:parent.$('#iframeModal').modal('hide');

これは、jQueryの親のインスタンスを使用してアイテムを検索し(コンテキストは不要です)、親でイベントを正しく発生させます。

12
JoshMB

idを使用するモーダルのiframeがわからない場合のもう1つの解決策:

関数を追加CloseModal

function CloseModal(frameElement) {
     if (frameElement) {
        var dialog = $(frameElement).closest(".modal");
        if (dialog.length > 0) {
            dialog.modal("hide");
        }
     }
}

ここで、frameElementiframe要素コンテナへの参照です。

そして、このパラメーターはiframeから次のように渡すことができます:

window.parent.CloseModal(window.frameElement);

window.frameElementの詳細 こちら

3
demo

閉じるボタンのクリックをトリガーすることもできます。

$('#iframeModal button.mce-close', parent.document).trigger('click');
1
dtmiRRor