2010-08-19 41 views
1

我发现了除了我需要的东西之外的所有东西的操作方法。这里是场景回到iframe的历史,但改变主窗口的地址

就像在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()

回答

0

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

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

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

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

祝你好运!

0

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

+0

Repopulating Divs将意味着重新获得数据,或有多个div。如果您在Firefox中打开gmail并禁用样式,则会看到它具有iframe,但会修改主窗口哈希。我已经使用jQuery +历史技巧,问题在于“后退”按钮只能保持主窗口或iframe的历史记录。 我无法同时更改主窗口历史记录和iframe历史记录 – Mikhail 2010-08-19 16:34:03

+0

明白了。误解了这个问题。 – CogitoErgoSum 2010-08-19 16:55:55

0

这不是一个直接的答案,但如果你在jQuery的BBQ的源代码一眼@http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js

它覆盖的后退/前进按钮,并保持了在浏览器历史记录,如果这是任何可能有用使用。

+0

我检查过它;感谢您的参考。尽管这很有用,但它并未解决更改窗口历史记录时更改iframe历史记录的问题 – Mikhail 2010-08-19 16:45:18