FancyBox iframe возвращает parent. $ Как неопределенный (с использованием WordPress) - PullRequest
9 голосов
/ 09 февраля 2010

Я пытаюсь закрыть FancyBox изнутри фрейма, но parent.$ всегда undefined. Это мой iframe JavaScript:

 <script type='text/javascript' 
  src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'>
 </script>
 <script type="text/javascript">
 jQuery(document).ready(function($){
     (function($) {
         $.fn.closeFancyBox = function() {
             $(this).click(function() {
                 parent.$.fancybox.close();
             });
         };
      })(jQuery);
      $('#cancel').closeFancyBox();
      });
 });
 </script>

Замена parent.$.fancybox.close(); на alert('clicked'); работает просто отлично. Я не понимаю, почему parent.$ равно undefined, если iframe находится в том же домене.

Я использую WordPress 2.9.1 с плагином FancyBox для Wordpress.

  • главная страница: //server.local/web/test/index.php
  • Страница iframe: //server.local/web/test/wp-content/plugins/wp-test/test.htm

Первый из этих URL-адресов является главной страницей, второй - страницей iframe; server.local мой домашний тестовый сервер.

Есть идеи? Я могу вставить весь источник, если это будет полезно.

Ответы [ 9 ]

7 голосов
/ 09 февраля 2010

Не определено, так как WordPress запускает jQuery в режиме noConflict. Используйте это вместо:

parent.jQuery.fancybox.close();
Режим

noConflict означает, что $ не равно jQuery. Вы должны явно использовать jQuery для доступа к тому, что вы обычно можете получить с помощью $.

4 голосов
/ 02 сентября 2011

Мой ответ связан не с WordPress, а с ответом на fancybox в целом.

в iframe, если вы включили основной скрипт jquery (jquery-1.5.2.min.js), он будет конфликтовать с таковым на главной странице и parent. $. Fancybox не будет работать в этом случае.

другие вещи, связанные с jquery (например, для вкладок), будут работать внутри iframe. следовательно, начинающему программисту не придет в голову, что второй скрипт jquery внутри iframe - злодей.

3 голосов
/ 16 мая 2011

Любые варианты parent.fancybox.close () не работают для меня, должен быть некоторый конфликт lib.

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

parent.jQuery('#fancybox-overlay').css('display', 'none');
parent.jQuery('#fancybox-wrap').css('display', 'none');
2 голосов
/ 10 мая 2011

Я должен был сделать это:

.

window.top.window $ fancybox.close ();.

Получил ошибку типа раньше.

1 голос
/ 20 января 2012

У меня была такая же проблема, и я заметил, что не использую

type:'iframe'

При вызове fancybox, это решило мою проблему

1 голос
/ 10 августа 2010

Ни одно из предложений не сработало для меня. Я должен был обойти это, используя следующий код. Последняя версия может поддерживать parent.jQuery.fancybox.close (); подход, но старые версии не работают с этим.

Для существующих сайтов с более старыми версиями плагинов / Jquery, попробуйте это

function close_window()
{
 $("#fancy_outer",window.parent.document).hide();
 $("#fancy_overlay",window.parent.document).hide();
 //window.top.window.$.fancybox.close(); this also does not work :(
}

вы можете объявить и использовать функцию close_window в содержимом Iframe.

1 голос
/ 13 июля 2010

Это работает для меня;)

<a href="javascript:parent.jQuery.fn.fancybox.close();" >

Спасибо за этот пост, на самом деле он немного меня наставил ... Мне плохо, потому что это заняло у меня всего несколько минут, и я ЗНАЮ, как расстраивает Fancybox для Wordpress !!

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

HI, Любой, у кого возникли проблемы с закрытием Fancy Box iFrame с помощью ручной установки Fancy Box в Wordpress 3.0:

Используйте эту ссылку в вашем iframe:

<a href="#" onClick="parent.jQuery.fancybox.close();" title="Close window">close fancybox</a>

Работает:)

0 голосов
/ 13 февраля 2010

Потратил довольно много часов, пытаясь отладить это, и ничего не получилось. Поэтому я отключил плагин «FancyBox for WordPress» с последней версией FancyBox, и он был исправлен. Действительно, стоило попробовать это раньше.

Проведя некоторое время с WordPress и его различными плагинами, я бы рекомендовал вызывать вещи вручную, а не полагаться на плагины. Это просто добавляет еще один уровень сложности, который, если вы знаете, что делаете, не должен быть там.

Спасибо Дугу за указание соответствующего синтаксиса для iframe для родительского окна jQuery в WordPress.

...