Закрытие модальной коробки с помощью iframe внутри iframe - PullRequest
1 голос
/ 16 июля 2009

Я пытаюсь программно закрыть модал Facebox с помощью кода JavaScript, который называется в пределах iframe. Это не очень хорошо работает с JavaScript DOM.

https://github.com/defunkt/facebox

В целом, как бы я закрыл универсальный модал, который встраивает iframe с кодом, чтобы закрыть его внутри iframe. (извините за скручивание (или глаз))

Вот мой пример:

У меня есть фейсбокс с чем-то вроде этого:

jQuery.facebox("stuff goes here <iframe src="example.php"...."  more stuff"); //opens the modal(works great)

Тогда ВНУТРИ фрейма, я хочу позвонить jQuery(document).trigger('close.facebox');. Кажется, это работает, только если я вызываю его на родительской странице или на модальной странице, но не в самом iframe. Есть ли способ, которым я могу закрыть его, вызвав его в iframe example.php?

Редактировать: я спрашивал, как я могу получить доступ к родительскому фрейму изнутри фрейма с помощью jQuery, чтобы упростить вопрос.

Ответы [ 4 ]

2 голосов
/ 16 июля 2009

Вы не можете изменить элемент, который «принадлежит» родительской странице из этой всплывающей страницы. Насколько я знаю, вам придется выдать свой код скрытия от родителя. Вы всегда можете сделать так, чтобы ваш код внутри диалога делал что-то вроде этого:

parent.$("#dialog").hide();

Я думаю, это то, что вы спрашиваете ...

1 голос
/ 29 ноября 2011

Вот что у меня сработало:

Моя страница имеет IFRAME внутри DIV, DIV - это то, что facebox должен fadeIn и fadeOut. SRC IFRAME - это страница, на которой есть ссылка, которая выглядит следующим образом:

<a href="#" onclick="parent.close_QM_facebox()">close this facebox modal</a>

В ГОЛОВКЕ страницы, которая содержит DIV и IFRAME (НЕ страницу, вызванную в IFRAME), у меня есть функция JavaScript «close_QM_facebox ()», которая выглядит следующим образом:

function close_QM_facebox() { jQuery(document).trigger('close.facebox'); }

Вот и все. Не проверенный кросс-браузер или в производстве еще. Я потратил часы на поиск этой проблемы и пробовал все: от замены одинарных к двойным кавычкам, document-dot-this и parent-dot-that, window.frames [«что угодно»], и эта однострочная функция делает это. Если вы пытаетесь вызвать функцию со страницы, которая вызывается в IFRAME, вы должны обязательно использовать parent .close_QM_facebox (). Надеюсь, это поможет.

Кстати, см. Строки 47 и 49 файла facebox.js ver 1.2 - это решение было прямо в закомментированном разделе «Использование» самого файла .js. Я скопировал и вставил строку 49 в свою функцию, ничего не изменив, кроме как откомментировав ее:)

0 голосов
/ 17 декабря 2010

Я думаю, вы можете использовать FancyBox . Есть открытые методы, позволяющие закрывать модальное диалоговое окно внутри iframe, также есть возможность заставить модный блок работать как модальное окно: - Внутри использования iframe - parent. $. Fancybox.close ();

Нет проблем, если вы используете сценарии в одном и том же домене, если вы хотите использовать междоменный домен, просто предоставьте каждую страницу (.php / html и т. Д.), Которая безопасно вызывает друг друга, с помощью POST / GET. Но чтобы закрыть модал fancybox, вы должны запустить эти методы с той же доменной страницей.

Надеюсь, у тебя это получится, Стэн.

0 голосов
/ 16 июля 2009

Встроенный iframe указывает на URL-адрес другого домена, верно? В этом случае нет, вы не можете по соображениям безопасности делать какие-либо вызовы родительского документа изнутри iframe.

...