Может ли iframe открывать окно в стиле лайтбокса?

Этот вопрос не о всплывающем фрейме внутри лайтбокса; скорее, речь идет об iframe на странице, который может запускать собственное окно в стиле Lightbox на странице, содержащей этот iframe. Я думаю, что это невозможно, потому что iframe содержит содержимое другого URL-адреса, и любой лайтбокс, запускаемый этим URL-адресом, должен соответствовать iframe. Спасибо.


person Alex    schedule 17.06.2010    source источник


Ответы (7)


<iframe> не может взаимодействовать со своим родительским фреймом, если два фрейма находятся в разных доменах.

person SLaks    schedule 17.06.2010
comment
Так что, если iframe сам по себе открывает лайтбокс (без взаимодействия скрипта с родительской страницей), окно должно соответствовать размерам iframe или это недопустимо? - person Alex; 17.06.2010
comment
Вил, это не невозможно. Вы можете взаимодействовать друг с другом, используя промежуточный сервер через AJAX. Конечно, вам нужен доступ к обоим фреймам. - person Javier Parra; 17.06.2010
comment
Вы также можете использовать postMessage (из HTML 5), который был предназначен для этого. Таким образом, вы могли бы даже взаимодействовать между двумя вкладками или окнами. - person Nux; 30.08.2012

Если оба сайта принадлежат одному и тому же домену, вы можете добавить JS лайтбокса в основной фрейм и вызвать функцию внутри iframe, используя «parent.function».

person Javier Parra    schedule 17.06.2010
comment
Спасибо, Хавьер. К сожалению, сайт iframe будет удаленным URL-адресом. - person Alex; 17.06.2010
comment
Если у вас есть доступ к удаленному URL-адресу, вы можете настроить своего рода прослушиватель AJAX, iframe может отправить на сервер «запрос лайтбокса», и когда родитель подберет его, покажите его. Если у вас нет контроля над родительским фреймом, это невозможно, для этого он и предназначен. - person Javier Parra; 17.06.2010

Попробуйте посмотреть на fancybox. Я знаю, что он поддерживает iframes, и я всегда использую его поверх Lightbox, гораздо более настраиваемый. Я почти уверен, что он может работать с вложенными фреймами, однако могу ошибаться. Тем не менее стоит попробовать.

Может отображать изображения, элементы HTML, фильмы SWF, фреймы, а также запросы Ajax.

В нижней части страницы есть примеры: http://fancybox.net/.

person theorise    schedule 17.06.2010
comment
Спасибо, danixd. Я использовал Fancybox, но я не пытаюсь показать iframe внутри Lightbox; скорее, мне нужно, чтобы Lightbox/Fancybox выскакивал из iframe. Насколько я понимаю, это невозможно. - person Alex; 17.06.2010

Я не знаю, есть ли он где-нибудь в Интернете, но я видел, как Facebook провел презентацию о внедрении iframe в другие сайты, чтобы обойти такие проблемы с межсайтовыми проблемами. Стоит посмотреть.

person Mr. Boy    schedule 17.06.2010

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

Когда вы получаете сообщение из фрейма (возможно, с URL-адресом изображения), вы просто открываете диалоговое окно лайтбокса в своем основном документе.

person Nux    schedule 30.08.2012

Простой обходной путь, который сработал для меня, состоял в том, чтобы инициализировать лайтбокс в родительском окне, затем создать пустую ссылку-заполнитель и функцию, которая изменяет href и щелкает ссылку-заполнитель:

В верхнем или нижнем колонтитуле родительского окна:

<script type="text/javascript">
  $(function () {
    $('.lightbox').lightBox();
  });

  function image_preview(url)
  {
     $('#fakebox').attr('href',url);
     $('#fakebox').trigger('click')   
  }
</script>

Где-то в теле родительского окна:

<a href="" class="lightbox" id="fakebox"></a>

Итак, в iframe я вызываю родительскую функцию для запуска fancybox:

<a href="JavaScript:void(0);" class="btn btn-tertiary btn-small" onClick="parent.image_preview('http://static8.depositphotos.com/1007989/1011/i/950/depositphotos_10118078-Grinning-Smiley.jpg')">Preview</a>
person Giovanni Della Cagna    schedule 26.03.2013

Мы сталкиваемся с той же проблемой, я думаю, одним из возможных решений является window.open из iframe.

person Mohammed Vaseem Siddiqui    schedule 15.08.2012