Подтвердить что ты не робот

Закрыть Bootstrap modal изнутри iframe

Страница, которая открывает Twitter Bootstrap Modal с 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. Ex. щелкнув ссылку внутри iframe-modal.html, чтобы закрыть модальный. То, что я пробовал, но не удалось:

    $('#iframeModal', window.parent.document).modal('hide');
    $('#iframeModal', top.document).modal('hide');
    $('#iframeModal').modal('hide');
4b9b3361

Ответ 1

Вы всегда можете создать глобально доступную функцию, которая закрывает модальное окно Bootstrap.

например.

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

Затем из iframe вызовите его, используя:

window.parent.closeModal();

Ответ 2

Проблема заключается в том, что события jQuery регистрируются с отдельным экземпляром страницы jQuery. Таким образом, $('#iframeModal', window.parent.document).modal('hide'); фактически запускает событие hide в iframe, а не в исходный документ.

Это должно работать: parent.$('#iframeModal').modal('hide');

Это будет использовать родительский экземпляр jQuery для поиска элемента (так что не нужен контекст), и он будет правильно запускать событие в родительском.

Ответ 3

Еще одно решение, если вы не знаете id модальных, которые используют iframe:

Добавить функцию CloseModal

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 вы можете найти здесь

Ответ 4

Вы также можете нажать кнопку закрытия:

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