关闭iframe内部的Bootstrap模式

Close Bootstrap modal from inside iframe

本文关键字:Bootstrap 模式 内部 iframe 关闭      更新时间:2023-09-26

打开带有iframe的Twitter Bootstrap Modal的页面:

<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');

你总是可以创建一个全局可访问的函数来关闭Bootstrap模式窗口。

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

然后从iframe中调用它:

window.parent.closeModal();

问题是jQuery事件正在被注册为单个页面的jQuery实例。因此,$('#iframeModal', window.parent.document).modal('hide');实际上将触发iframe中的隐藏事件,而不是父文档。

这应该工作:parent.$('#iframeModal').modal('hide');

这将使用父类的jQuery实例来查找项目(因此不需要上下文),然后它将在父类中正确触发事件。

如果你不知道id的模式使用iframe:

添加函数 closemode

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

其中frameElement,引用iframe元素容器

这个参数可以像这样从iframe传递:

window.parent.CloseModal(window.frameElement);

关于window.frameElement的更多信息请点击这里

还可以触发点击关闭按钮:

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