【问题标题】:Going back in history of iframe but changing address of main window回到 iframe 的历史但更改主窗口的地址
【发布时间】:2010-08-19 14:53:36
【问题描述】:

我已经找到了处理除我需要之外的所有内容的解决方案。这是场景

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

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

我发现了一个鬼鬼祟祟的history.replaceState(temp, '', iframelocation),它在单击链接时可以无缝运行,但往回走,它实际上会尝试在主窗口中加载 iframe 位置。

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

谢谢!

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

【问题讨论】:

    标签: javascript iframe history


    【解决方案1】:

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

    【讨论】:

    • 重新填充 div 意味着重新获取数据或拥有多个 div。如果您在 Firefox 中打开 gmail 并禁用样式,您会看到它具有 iframe,但它会修改主窗口哈希。我已经在使用 jquery + 历史技巧,问题是“后退”按钮只能维护主窗口或 iframe 的历史记录。我无法同时更改主窗口历史记录和 iframe 历史记录
    • 知道了。误解了这个问题。
    【解决方案2】:

    这不是一个直接的答案,但如果你看一下 jQuery BBQ @http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js 的源代码,它可能会很有用

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

    【讨论】:

    • 我已经检查过了;感谢您的参考。虽然这很有用,但它并没有解决在更改窗口历史记录时更改 iframe 历史记录的问题
    【解决方案3】:

    我还没有找到一种方法让浏览器负责使用历史记录中的缓存。

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

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

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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2012-04-07
      • 1970-01-01
      • 2015-01-06
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多