2009-07-16 7 views
1

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

https://github.com/defunkt/facebox

В более общем плане, как бы я закрываю общий модальный, который встраивает в IFRAME с кодом, чтобы закрыть его внутри фрейма. (Извините за Tounge (или глаза) скручивание)

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

У меня есть facebox с чем-то вроде этого:

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

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

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

ответ

2

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

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

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

+0

Я спрашивал, как я могу получить доступ к родительскому фрейму из iframe с помощью JQuery, чтобы упростить вопрос. –

+0

Мой пример будет делать это. Тогда вы сможете управлять тем, что вам нужно оттуда. – Alex

0

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

+0

Нет, это в том же домене :) –

+0

hmmm. Тогда я не уверен! Сожалею. –

0

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

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

Надеюсь, это сработает для вас Стэн.

1

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

Моя страница имеет 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 ['whatever'], и эта однострочная функция делает это.Если вы пытаетесь вызвать функцию со страницы, которая вызывается в IFRAME, вы должны обязательно использовать родительский .close_QM_facebox(). Надеюсь это поможет.

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

Смежные вопросы