我使用fancybox来显示一个iframe,并在点击按钮时关闭它。这只是为了测试。关闭功能在IE和FF上可以工作,但在Chrome上不能。
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript" src="fancybox/jquery.fancybox-1.3.4.pack.js"></script>
<link rel="stylesheet" href="fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />
<link rel="stylesheet" type="text/css" href="default.css" />
<link rel="stylesheet" type="text/css" href="default2.css" />
</head>
<body id="editadd">
<h1>Create</h1>
<div class="centered">
<fieldset>
<legend>Details</legend>
<p>Name: <input type="text" /></p>
</fieldset>
<fieldset>
<legend>Add Assignments</legend>
<p>stuff</p>
<input type="text" value="stuff" />
<br />
</fieldset>
<br />
<input type="submit" OnClick="parent.$.fancybox.close();" value="Save"/>
<input type="submit" OnClick="parent.$.fancybox.close();" value="Cancel"/>
</div>
</body>
点击保存或取消按钮后,没有任何React(它在FF和IE上关闭,并返回到上一页)。我在Chrome上查看了Javascript控制台,看看发生了什么,错误是:
未捕获的类型错误:无法读取onclick上未定义(匿名函数)的属性'fancybox'
我也试过"javascript:窗口.父.$. fancybox. close();"我不能在google groups(fancybox论坛的所在地)里问,因为由于某种原因,它在校园里被屏蔽了。
3条答案
按热度按时间3pmvbmvn1#
您在使用Same origin policy时遇到问题:带框架的页面与父窗口在不同的主机上提供。我的答案包括两个解决方案:
1.在
<iframe>
、http://jsfiddle.net/BYssk/1/上附加和处理onload
事件1.使用
window.postMessage
(请参见答案底部,建议使用)、http://jsfiddle.net/5fGRj/1/要解决这个问题,您可以使用以下方法之一。这两种方法都要求在必须关闭框架中的页面时重新加载该页面。这可以通过提交表单来实现。不需要
onclick
处理程序。两种方法的预览:http://jsfiddle.net/BYssk/1/1.如果您的iFrame嵌入在页面中:
2.如果iFrame是动态创建的:
此方法背后的引擎:
1.加载帧的内容时,将触发
onload
事件(1)。1.当用户提交表单或退出框架内的页面时,将触发另一个
onload
事件(2)。1.脚本在第一个
onload
事件中不执行任何操作,但在第二个onload
事件中,脚本调用$.fancybox.close()
方法。替代方法
另一种方法是使用现代的
window.postMessage
方法,它比以前的方法可靠得多,并且在所有现代浏览器中都支持。Fiddle:http://jsfiddle.net/5fGRj/1/主窗口中的脚本:
带框架页面内的必要代码:
56lgkhnf2#
问题出在jquery 1.9.1和旧的fancybox上。或者使用fancybox 1.3.xx和jquery 1.8.x
或者只是更新fancybox 2.1.x的最新版本http://www.fancyapps.com/fancybox/#license
628mspwn3#
如果你在一个特定的主机上登录WordPress,就像我在加载fancybox一样,在一个匿名的窗口或标签中注销或查看资源不会在Chrome开发者工具控制台面板中产生错误,而在登录时检查它。