FancyBox iframe возвращает parent.$ как неопределенный (с использованием WordPress)
Вопрос
Я пытаюсь закрыть Модная коробка изнутри 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>
Это работает :)