Jquery FancyBox iframe返回未定义的父项$(使用WordPress)

Jquery FancyBox iframe返回未定义的父项$(使用WordPress),jquery,wordpress,iframe,fancybox,undefined,Jquery,Wordpress,Iframe,Fancybox,Undefined,我试图从iframe中关闭,但是parent.$始终是未定义的。 这是我的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(fu

我试图从iframe中关闭,但是
parent.$
始终是
未定义的
。 这是我的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>

jQuery(文档).ready(函数($){
(函数($){
$.fn.closeFancyBox=函数(){
$(此)。单击(函数(){
父项。$.fancybox.close();
});
};
})(jQuery);
$(“#取消”).closeFancyBox();
});
});
替换
parent.$.fancybox.close()带有
警报('clicked')工作正常。我不明白为什么当iframe在同一个域中时,$
是未定义的

我正在使用WordPress 2.9.1和WordPress插件的FancyBox

  • 主页:
    //server.local/web/test/index.php
  • iframe页面:
    //server.local/web/test/wp content/plugins/wp test/test.htm
这些URL中的第一个是主页,第二个是iframe页面<代码>服务器。本地
是我的家庭测试服务器


有什么想法吗?如果有帮助的话,我可以粘贴整个源代码。

它没有定义,因为WordPress在模式下运行jQuery。改用这个:

parent.jQuery.fancybox.close();

noConflict
模式意味着
$
不等于jQuery。您必须显式地使用
jQuery
来访问您通常可以使用
$

访问的内容。您花了好几个小时试图调试它,但结果一无所获所以我用最新版本的FancyBox关闭了“用于WordPress的FancyBox”插件,它已经修复。真的应该早点尝试

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

感谢Doug在WordPress中为iframe-to-parent窗口jQuery指出了适当的语法。

这对我很有用;)


谢谢你的这篇文章,它实际上引导了我一点。。。我感觉很糟糕,因为我只花了几分钟,我知道Fancybox for Wordpress是多么令人沮丧

你好, 使用Wordpress 3.0中的Fancy Box手动安装关闭Fancy Box iFrame时遇到问题的任何人:

在iframe中使用此链接:

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


有效:)

这些建议对我都不起作用。我必须使用下面的代码来解决这个问题。 最新版本可能支持parent.jQuery.fancybox.close();方法,但旧版本不适用于此

对于具有较旧版本的plugins/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。

我必须这样做:

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


之前出现类型错误。

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

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

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

我的答案与wordpress无关,但总体上是针对fancybox的

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

其他与jquery相关的东西(比如标签)将在iframe中工作。
因此,新手程序员不会想到iframe中的第二个jquery脚本就是反派。

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

type:'iframe'
在调用fancybox时,
它解决了我的问题

对不起,应该说我知道这一点;我包含的js是一个片段。我编辑了我的问题以反映这一点——传递$意味着我不必使用“jQuery”。@Aleksandr在
iframe
中传递
$
不会影响父页面。事实上,您在
iframe
中包含了一个完全独立的jQuery实例。如果注意到所写内容,则传递
$
,但引用
父项。$
。这就好像你有
var a=1;警报(obj.a)除非代码中有赋值,否则您不会期望这两个项引用相同的值。您是对的,这是有意义的。但是,使用以下代码:
jQuery('#cancel')。单击(函数(){parent.jQuery.fancybox.close();})
Firebug:
parent.jQuery.fancybox未定义
中仍然出现
未定义的错误。你知道为什么会这样吗?谢谢你迄今为止的帮助!一般来说,我对JavaScript和编码还是非常陌生。@Aleksandr我现在正在工作,但我会在有机会的时候尝试一个解决方案,并用结果更新我的答案。有史以来最好的黑客。非常感谢。
type:'iframe'