FancyBox iframe возвращает parent.$ как неопределенный (с использованием WordPress)

StackOverflow https://stackoverflow.com/questions/2227096

Вопрос

Я пытаюсь закрыть Модная коробка изнутри iframe, но 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 это мой домашний тестовый сервер.

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

Это было полезно?

Решение 8

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

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

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

Другие советы

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

parent.jQuery.fancybox.close();

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

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

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

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

Любые варианты родительского.fancybox.close() у меня не сработали, возможно, это какой-то конфликт библиотек.

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

parent.jQuery('#fancybox-overlay').css('display', 'none');
parent.jQuery('#fancybox-wrap').css('display', 'none');

Мне пришлось сделать это:

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

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

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

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

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

Ни одно из предложений мне не помогло.Мне пришлось обойти это, используя следующий код.Последняя версия может поддерживать родительский.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.

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

type:'iframe'

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

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

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

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

Это работает :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top