FancyBox iframe返回parent。$ as undefined(使用WordPress)

时间:2010-02-09 05:58:31

标签: jquery wordpress iframe fancybox undefined

我正在尝试从iframe中关闭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');的工作正常。当iframe位于同一个域中时,我不明白为什么parent.$undefined

我正在使用WordPress 2.9.1,使用FancyBox for Wordpress插件。

  • 主页://server.local/web/test/index.php
  • iframe页面://server.local/web/test/wp-content/plugins/wp-test/test.htm

这些网址中的第一个是主页面,第二个是iframe页面; server.local是我的家庭测试服务器。

有什么想法吗?如果它有用,我可以将整个源代码粘贴。

9 个答案:

答案 0 :(得分:7)

未定义,因为WordPress以noConflict模式运行jQuery。请改用:

parent.jQuery.fancybox.close();

noConflict模式意味着$不等于jQuery。您必须明确使用jQuery来访问您通常可以使用$访问的内容。

答案 1 :(得分:4)

我的答案与wordpress无关,但一般来说就是fancybox。

iframe中的

,如果你已经包含了主jquery脚本(jquery-1.5.2.min.js),那么它将与主页面上的那个冲突,并且 parent。$。fancybox 在这种情况下不起作用。

其他与jquery相关的东西(例如:标签)将在iframe内部工作。 因此,新手程序员不会发生iframe中的第二个jquery脚本是恶棍。

答案 2 :(得分:3)

parent.fancybox.close()的任何变体对我都不起作用,必定是一些lib冲突。

这是我最新fancybox的工作解决方法,您应该使用css display属性而不是.hide()方法,因为在这种情况下fancybox将无法再次打开。

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

答案 3 :(得分:2)

我必须这样做:

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

之前有类型错误。

答案 4 :(得分:1)

这对我有用;)

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

感谢这篇文章,它实际上引导了我一点......我感觉很糟糕,因为它花了我几分钟而且我知道Fancybox对于Wordpress来说是多么令人沮丧!!

答案 5 :(得分:1)

这些建议都不适合我。我不得不使用以下代码解决它。 最新版本可能支持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 :(
}

您可以在Iframe内容中声明并使用函数close_window。

答案 6 :(得分:1)

我遇到了同样的问题并注意到我没有使用

type:'iframe'

调用fancybox时, 它解决了我的问题

答案 7 :(得分:0)

花了几个小时试图调试这个并且无处可去。 所以我用最新版本的FancyBox打开了'FancyBox for WordPress'插件,并且修复了。真的应该早点尝试过。

在花了一些时间使用WordPress及其各种插件后,我建议手动调用而不是依赖插件。它只是增加了另一层复杂性,如果你知道你在做什么,就不需要在那里。

感谢Doug在WordPress中向iframe指向父窗口jQuery的相应语法。

答案 8 :(得分:0)

HI, 任何人在使用Wordpress 3.0手动安装Fancy Box时无法关闭Fancy Box iFrame:

在iframe中使用此链接:

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

有效:)