Fancybox - 单击 iframe 上的链接,更新 URL 地址

Posted

技术标签:

【中文标题】Fancybox - 单击 iframe 上的链接,更新 URL 地址【英文标题】:Fancybox - Clicking a link on iframe, updates URL address 【发布时间】:2014-11-24 04:05:07 【问题描述】:

现在我有一个 iFrame 内容正在使用 fancybox 打开。当它打开时,它会更新 URL 地址以匹配 iFrame URL。当它关闭时,它将返回到以前的 URL。问题是在 iFrame 内部,我有导航键可以在帖子之间切换。这样做不会像关闭和打开一样更新 URL 地址。有什么办法可以实现吗?

代码是:

JS

$(".caption a").fancybox(
    type: 'iframe',
    width    : '1470px', 
    height   : '1800px', 
    transitionIn : 'fade',
    transitionOut : 'fade',
    autoScale: false,
    autoDimensions: false,
    autoSize    : false, 
    arrows    : false,
    nextClick : false,
    padding : 0,
    beforeShow: function () 
        $.cookie('window_location', window.location,  path: '/' ); 
        window.history.pushState("string", "Title", $(this).attr('href'));  
    ,
    afterClose: function() 
        window.history.pushState("string", "Title", $.cookie('window_location'));   
        $.removeCookie('window_location',  path: '/' );
    
);

HTML

<div class="caption">            
    <a href="<?php the_permalink(); ?>"></a>
</div>

编辑:

我已经创建了一个当前正在发生的事情的工作示例。 http://josemelo.net/testing/

如您所见,当您点击打开 iframe 时,它​​会使用您正在 iframe 构建的页面(在本例中为 iframe.html)更新浏览器的 URL。但是,如果您导航到 iframe 内的 page2,则 URL 不会更新。我要更新!所以基本上这里的目标是,每当您导航到 iframe 内的其他页面时,它都会不断更新 URL。

在http://josemelo.net/testing/里面我有一个名为index.html的文件:

<!DOCTYPE html>
<head>
    <link rel="stylesheet" href="fancybox.css">
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script src="fancybox-2.1.5.js"></script>
    <script src="cookie-1.4.0.js"></script>
    <script>
    $(document).ready(function()  
        $(".fancybox").fancybox(
            type: 'iframe',
            width    : '800px', 
            height   : '600px', 
            transitionIn : 'fade',
            transitionOut : 'fade',
            autoScale: false,
            autoDimensions: false,
            autoSize    : false, 
            arrows    : false,
            nextClick : false,
            padding : 0,
            helpers:  overlay:  locked: false  ,
            beforeShow: function () 
                $.cookie('window_location', window.location,  path: '/' ); 
                window.history.pushState("string", "Title", $(this).attr('href'));  
            ,
            afterClose: function() 
                window.history.pushState("string", "Title", $.cookie('window_location'));   
                $.removeCookie('window_location',  path: '/' );
            
        );
    );
    </script>
</head>
<body>
    <a href="iframe.html" class="fancybox">Click to open iframe</a>
</body>
</html>

另一个名为 iframe.html:

<!DOCTYPE html>
<head>
</head>
<body>
    <a href="page2.html">Click to go to page 2</a>
</body>
</html>

另一个名为page2.html:

<!DOCTYPE html>
<head>
</head>
<body>
    This is page 2! Wanna go back? <a href="iframe.html">Click here</a>
</body>
</html>

并链接到 fancybox js 和 css 以及 jQuery 的 cookie js。你可以在http://josemelo.net/testing/testing.zip下载整个包

【问题讨论】:

我读了 3 次你的问题,但我不太确定你在问什么? iframe 内容是否与打开页面属于同一域? 是的。问题是,假设您正在打开一个花式框 iframe。在 iframe 中,您将浏览页面(在同一域中),即使您在 fancybox 中查看页面,URL 也会更改为这些特定页面地址。你明白吗?在我上面的代码中,每次打开fancybox 时,它都会将URL 地址更改为页面之一,即使您是通过fancybox 查看它。我想要相同的,但是在 iframe 本身内更改页面时。 对不起,但不是。尽管您导航到 iframe 内的其他页面 jsfiddle.net/hy9qe8hp,但 iframe 的 URL 永远不会改变 【参考方案1】:

如果每个人都遇到这个问题,我已经找到了一种方法来解决这个问题并让它发挥作用。基本上,您需要在每个 iframe 页面(或者在本例中为第一个)上做的就是:

<!DOCTYPE html>
<head>
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script>
    $("document").ready(function() 
        $("a.lala").click(function() 
            var cenas = $(this).attr('href');
            window.top.history.pushState("string", "Title", cenas);
        );
    );
    </script> 
</head>
<body>
    <a href="page2.html" class="lala">Click to go to page 2</a>
</body>
</html>

这基本上会将父级的 URL 更新为链接 href 中的值。

$("a.lala").click(function() 当用户点击下面的链接时,带有“lala”类。

var cenas = $(this).attr('href');创建一个名为“cenas”的变量来检索链接的href=""中的内容

window.top.history.pushState("string", "Title", cenas); 使用 var "cenas" 更新父级的 URL,即 href。

大家干杯。

【讨论】:

以上是关于Fancybox - 单击 iframe 上的链接,更新 URL 地址的主要内容,如果未能解决你的问题,请参考以下文章

同一页面上的两个 iframe fancybox

链接到 iFrame 内的花式框

您如何在 fancybox V2 中为 iframe 设置不同的高度/宽度?

fancybox iframe 内容和谷歌搜索

FancyBox 从 iframe 中关闭并将父页面带到链接

FancyBox iFrame 元素上的绑定事件