首页 文章

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

提问于
浏览
9

我想从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>

alert('clicked'); 替换 parent.$.fancybox.close(); 就可以了 . 当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 回答

  • 1

    它是未定义的,因为WordPress在noConflict模式下运行jQuery . 请改用:

    parent.jQuery.fancybox.close();
    

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

  • 7

    我的答案与wordpress无关,但总的来说就是fancybox .

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

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

  • 3

    parent.fancybox.close()的任何变体都不适合我,必须是一些lib冲突 .

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

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

    我不得不这样做:

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

    之前有类型错误 .

  • 1

    这对我有用;)

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

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

  • 0

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

  • 2

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

    type:'iframe'
    

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

  • 4

    花了几个小时试图调试这个并没有得到任何结果 . So I switched out the 'FancyBox for WordPress' plugin with the latest version of FancyBox, and it was fixed. 真的应该早点尝试过 .

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

    感谢Doug在WordPress中指出iframe到父窗口jQuery的适当语法 .

  • 1

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

    在iframe中使用此链接:

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

    有用 :)

相关问题