未捕获TypeError:无法读取未定义的属性’fancybox’ – 仅限Google Chrome错误?
我正在使用fancybox显示iframe并在单击按钮时关闭它。 这仅用于测试目的。 关闭function适用于IE和FF,但不适用于Chrome。
Test Create
单击“保存”或“取消”按钮时没有任何反应(它在FF和IE上关闭并将焦点返回到上一页)。 我查看了Chrome上的Javascript控制台,看看发生了什么,错误是:
未捕获的TypeError:无法读取未定义(匿名函数)onclick的属性’fancybox’
我也试过“javascript:window.parent。$。fancybox.close();” 代替。 我不能在谷歌小组(fancybox的论坛所在地)询问,因为出于某种原因它在校园里被封锁了。
您在使用相同原始策略时遇到问题:框架页面在与父窗口不同的主机上提供。 我的答案包括两个解决方案:
- 在
附加和处理
onload
事件, http://jsfiddle.net/BYssk/1/ - 使用
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; $("
这种方法背后的引擎:
- 加载帧的内容时,会触发
onload
事件(1)。 - 当用户提交表单或退出框架内的页面时,会触发另一个
onload
事件(2)。 - 该脚本在第一个
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