回到iframe的历史,但改变主窗口的地址

时间:2010-08-19 14:53:37

标签: javascript iframe history

除了我需要的东西之外,我找到了操纵一切的解决方案。这是场景

就像在GMail中一样 - 主要内容以iframe的形式呈现。单击主页面上的链接将以iframe为目标。这很好用,也很无缝。 此时如果我点击浏览器上的“返回” - iframe将返回。这很好,因为涉及缓存并且页面不会重新下载。

添加修改哈希的通用逻辑会破坏所有内容。现在,当您回击浏览器时,会更改has,但不会更改iframe历史记录。我已经尝试访问该特定iframe的历史记录 frames['myiframe'].history.back()但仍然会更改哈希而不更改iframe源。

我发现了一个鬼鬼祟祟的history.replaceState(temp, '', iframelocation),这在点击链接时可以无缝地工作,但是后退它实际上会尝试在主窗口中加载iframe位置。

我很茫然。我知道GMail不会在您每次回击或转发时都要求所有信息。那怎么做呢?它是否使用多个iframe,并更改哪一个可见?

谢谢!

P.S。 测试了一个简单的情况:创建一个iframe,并通过一些<a href="child" target="iframe">a更改链接 现在通过location.href = 'something'更改哈希到目前为止一直很好。现在,如果你明确告诉iframe回到历史 - 它不会 frames['iframe'].contentWindow.history.back()

3 个答案:

答案 0 :(得分:0)

Gmail使用AJAX请求来填充我相信的Div图层。您应该考虑使用JQuery动态加载数据。还有一个jquery历史插件,可以让您无缝地前后移动。 http://github.com/tkyk/jquery-history-plugin

答案 1 :(得分:0)

这不是一个直接的答案,但如果您浏览一下jQuery BBQ @ http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js

的源代码可能会有用。

它会覆盖后退/前进按钮,并保留浏览器内的历史记录,如果有任何用途的话。

答案 2 :(得分:0)

我找不到让浏览器负责在历史记录中使用缓存的方法。

我的最终解决方案是使用jquery的历史插件和div对象的javascript哈希数组。

var hash; // populated with the value after #
History[hash] = $('<div>').load(hash);

快速检查该值是否为空 - 并用div替换屏幕中心。到目前为止工作就像一个魅力,但是如果你点击已经加载的链接,哈希值不会改变,所以检测一个预期的刷新(通过点击你已经在的视图的链接)会更难。< / p> 祝你好运!