未捕获TypeError:无法读取未定义的属性’fancybox’ – 仅限Google Chrome错误?

我正在使用fancybox显示iframe并在单击按钮时关闭它。 这仅用于测试目的。 关闭function适用于IE和FF,但不适用于Chrome。

Test        

Create

Details

Name:

Add Assignments

stuff



单击“保存”或“取消”按钮时没有任何反应(它在FF和IE上关闭并将焦点返回到上一页)。 我查看了Chrome上的Javascript控制台,看看发生了什么,错误是:

未捕获的TypeError:无法读取未定义(匿名函数)onclick的属性’fancybox’

我也试过“javascript:window.parent。$。fancybox.close();” 代替。 我不能在谷歌小组(fancybox的论坛所在地)询问,因为出于某种原因它在校园里被封锁了。

您在使用相同原始策略时遇到问题:框架页面在与父窗口不同的主机上提供。 我的答案包括两个解决方案:

  1. 附加和处理onload事件, http://jsfiddle.net/BYssk/1/
  2. 使用window.postMessage (参见答案的底部,推荐) , http://jsfiddle.net/5fGRj/1/

要解决此问题,您可以使用以下方法之一。 这两种方法都要求框架中的页面在必须关闭时重新加载。 这可以通过提交表格来实现。 没有onclick处理程序是必要的。 两种方法的预览: http : //jsfiddle.net/BYssk/1/

1.如果您的iFrame嵌入在页面中:

   

2.如果您的iFrame是动态创建的:

 //The code below is executed inside some function. Definitely NOT globally var loaded = 0; $(" 

这种方法背后的引擎:

  1. 加载帧的内容时,会触发onload事件(1)。
  2. 当用户提交表单或退出框架内的页面时,会触发另一个onload事件(2)。
  3. 该脚本在第一个onload事件中不执行任何操作。 但是,在第二个onload事件中,脚本调用$.fancybox.close()方法。

替代方法

另一种方法包括使用现代的window.postMessage方法。 它比以前的方法更可靠,并且在所有现代浏览器中都受支持。 小提琴: http : //jsfiddle.net/5fGRj/1/

主窗口中的脚本:

 function closeFancyBox(){ $.fancybox.close(); } window.addEventListener("message", closeFancyBox, false); 

框架页面内的必要代码:

  PostMessage method

问题是jquery 1.9.1和旧的fancybox。 要么使用fancybox 1.3.xx和jquery 1.8.x.

或者只是更新最新版本的fancybox 2.1.x http://www.fancyapps.com/fancybox/#license