关闭fancybox iframe后,Chrome中的后退按钮无法正常工作

时间:2013-12-16 15:49:02

标签: jquery google-chrome fancybox

我前一段时间在fancybox github上发布了同样的问题,但当时问题无法解决,所以我想在这里再试一次:

在Chrome中,我打开一个fancybox iframe,然后使用iframe页面上的链接进行导航,然后关闭fancybox。关闭fancybox后,为了返回,我需要点击后退按钮的次数与我在iframe页面上点击的链接数量相同。所以我想(仅限Chrome - FF,IE工作正常)我在fancybox上做的任何导航都会在开启者的历史记录中记录,导致一种非常奇怪的行为:当用户关闭fancybox并点击后退按钮时,同一页面会反复重新加载,直到超出iframe上的点击次数为止。

这是一个例子: http://jsfiddle.net/YjXr5/ 以及我用来打开fancybox的代码

$("#link").fancybox({
    'autoDimensions'    : true,
    'width'                         : 400,
    'height'                        : 300,
    'autoScale'                     : false,
    'type'              : 'iframe'
});

在fancybox iframe中打开网站,浏览3-4次点击,然后关闭iframe。然后尝试右键单击 - >返回结果窗格并注意浏览器之间的不同行为 - FF和IE会将您发送到上一个“开启者”页面,而chrome只会重新加载开启者,就像您在iframe上点击链接一样多次。

如果没有解决方案,我也会对具有iframe选项和类似外观的fancybox的一个很好的选择感兴趣。

由于

2 个答案:

答案 0 :(得分:1)

问题是浏览器以不同方式管理history。据我所知,Opera和Safari也表现出同样的问题。

hacky 解决方法是在启动fancybox时捕获当前history.length,如果浏览器与Chrome,Opera匹配,则在关闭后将其恢复和Safari(我不知道任何其他浏览器,但答案可以扩展)

使用上面的代码,我会添加一些回调,例如:

var $history;
$("#link").fancybox({
    autoSize: true, //autoDimensions is an option for v1.3.4
    width: 400,
    height: 300,
    fitToView: false, //autoScale is an option for v1.3.4
    type: 'iframe',
    beforeLoad: function () {
        $history = window.history.length; // catch current history
    },
    afterClose: function () {
        if (navigator.userAgent.match(/(Chrome|Opera|Safari)/gi)) {
            var goTo = window.history.length - $history;
            window.history.go(-goTo) // restore initial history
        }
    }
});

参见 JSFIDDLE

注意:这适用于fancybox v2.1.x

答案 1 :(得分:0)

使用:(哈希:假)

演示

$('[data-fancybox="fancybox_image"]').fancybox({
        hash     : false
        });