4

如果可能的话,我希望使用 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 中。

4

1 回答 1

1

您可以做的是验证页面是否已在fancybox 中打开并执行正确的fancybox 方法,否则只需使用您的常规javascript 方法(即window.close()

话虽如此,在打开的页面(通过window.open()或fancybox)中,您可能具有关闭它的功能

function closePopup(){
 window.close();
}

关联到关闭按钮/链接,例如

<a href="javascript:;" onclick="closePopup()" >Close Window</a>

这肯定会关闭弹出窗口,但不会关闭花式框,因此您可以添加以下内容:

function closePopup(){
 window.close();
 if(parent.jQuery().fancybox) {
  parent.jQuery.fancybox.close();
 }
}

and that will work for either the popup window or fancybox.

于 2012-09-01T00:42:30.083 回答