【发布时间】:2012-08-31 11:53:49
【问题描述】:
如果可能,我希望使用 iframe 作为父级的子级打开一个花式框。
是否可以打开一个 iframe(用 fancybox 构建)并让浏览器相信我已经使用 window.open 打开了它,这样 window.close() 或 window.opener.location.reload() 之类的功能仍然可以工作?
fancybox 代码很简单:
$("#custom_alert").fancybox({
'width' : w,
'height' : h,
'autoScale' : false,
'transitionIn' : 'none',
'transitionOut' : 'none',
'type' : 'iframe',
//'scrolling' : 'no'
}).trigger('click');
编辑:我不能使用类似的功能:
function closePopup(){
window.close();
if(parent.jQuery().fancybox) {
parent.jQuery.fancybox.close();
}
}
我必须使用 window.close() 函数。
解决我的问题也可以告诉我为什么我不能像使用警报或确认那样重写关闭函数。
编辑 2: 感谢 Raohmaru 和 JFK,在看到小提琴奏效后,我已经完成了我需要的功能,但是(对我而言)发生了一件奇怪的事情:
工作代码,如果其他人需要它是:
(function() {
var proxied = window.close;
window.close = function() {
if(parent.jQuery().fancybox) {
parent.jQuery.fancybox.close();
}
else
return proxied.apply(this, arguments);
};
})();
这适用于 fancybox 和 window.open 案例。
我的问题是这样的: 我在索引中包含了一些 .js 文件:
overwrites
fancybox pack
general scripts
如果我将该函数放在通用脚本中,它可以完美运行,但是如果我将它放在覆盖 js 中(它应该在哪里),它就不起作用(没有控制台错误,只是没有任何反应)。我曾尝试交换包含的位置,但没有运气。
这就是为什么我一开始就不能让它工作的原因,因为我总是将它包含在覆盖的 .js 中。
【问题讨论】:
-
哪些浏览器不能覆盖关闭功能?您可以在 Firefox(在 13.0.1 中测试)、Chrome(21.0)甚至在 Internet Explorer 8 及更低版本中执行此操作。但是你不能在标准模式下的 IE9 (link)。
-
关闭覆盖功能在任何浏览器上都对我不起作用,JS也没有抛出任何错误。
-
这个例子不适合你? jsfiddle.net/ufPbf。另请注意,您不能在 iframe 中重写父窗口的对象。
-
@Raohmaru :编辑问题,谢谢。
-
我猜是因为如果还没有加载fancybox 脚本,这个
parent.jQuery.fancybox.close();就没有意义了。我认为overwrites应该是最后包含的脚本。
标签: javascript iframe fancybox parent-child