【问题标题】:Multiple iframes with individual back buttons带有单独后退按钮的多个 iframe
【发布时间】:2013-11-26 23:33:39
【问题描述】:

我有一个包含两个 iframe 的网站,每个 iframe 都包含来自我的服务器的不同内容。我希望每个 iframe 都有一个仅适用于其自身的后退按钮,即 backbutton_1 仅适用于 frame_1backbutton_2 仅适用于 frame_2 等。

这些是我尝试实施的方法,但都无济于事。

  • a) 使用 onclick="history.back()" 将后退按钮放入 iframe

  • b) 使用onclick="iframe.contentWindow.history.back()" 将后退按钮放入 iframe

  • c) 放回 带有onclick="frame_1.history.back()" & onclick="frame_2.history.back()"的按钮进入父网站

不幸的是,这些方法中的每一个都只能在全局范围内而不是单独工作。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript button iframe browser-history


    【解决方案1】:

    我认为您只能在有限的范围内使用同一域上的 iframe 进行单个 iframe 历史导航,但实际上这不是一种非常有用的机制,因为实际上只能有一个历史序列,因此单个历史导航与全局冲突历史导航。一旦你从一个历史序列中分离出来,一切都被抹去,所以如果使用单独的导航,全球导航将是不可能的(否则它将解开时空连续体的结构并摧毁整个宇宙)。

    想象一下,如果您有一个父页面 A 和两个 iframe B 和 C,并且您像这样向前导航:

    第 1 步:A 查看第 1 页,B 查看第 2 页和 C 第 3 页

    第 2 步:A 查看第 1 页,B 查看第 2 页,C 导航到第 4 页

    第 3 步:A 查看第 1 页,B 导航到第 5 页,C 导航到第 4 页

    第 4 步:A 查看第 1 页,B 查看第 5 页,C 导航到第 6 页

    使用全局历史记录的场景:如果我们使用浏览器“后退”按钮向后导航两次到整个第 2 步,您希望 B 显示第 2 页和 C 第 4 页,如果您前进到第 3 步,您会看到 B 显示 5 和C 显示 4。现在用户将 C 导航到第 1 页。用户现在已经删除了此点之后的所有历史记录,因为我们已经分叉了历史记录,所以没有全局转发(它变成灰色)。我们可以返回到第 3、2 和 1 步,也可以从第 3 步向前导航到新的第 4 步(B 显示 5,C 显示 1)。

    使用单个历史记录的场景:如果我们使用单个按钮进行导航,并按下 iframe C 上的后退按钮两次,您可能会期望在单个级别上 C 移动到第 4 页(在第 2 步中的位置)而 iframe B 会留在第 5 页。现在用户将 B 导航到第 7 页。现在全局和单个历史按钮会发生冲突,因为您可能期望按回 C 可能会返回第 3 页(在步骤 1 中的内容),但是全局 Back 会将两个 iframe 移动到哪里?

    如果您想要真正独立的 iframe 历史记录,我认为您需要在代码中跟踪用户的导航,但请注意,由于上述冲突,使用全局导航会很奇怪。

    【讨论】:

    • 我理解您所面临的困境,@guymid。你认为有一种方法可以欺骗 iframe 创建的后退按钮完全独立工作吗?也许按钮只知道其 iframe 的历史,而不是页面的全局历史?我开始认为我应该完全远离 history.back()。
    • 这是一个带有单独的工作后退按钮的 iframe 示例(但是,前进按钮不起作用)superapple.ru。我与页面的创建者交谈,他试图帮助我解决我的问题,但这对我来说有点太复杂了。
    • 对不起,我的意思是为我的答案添加一个实际的解决方案,我认为您必须在自己的代码中进行跟踪,但请注意两种导航类型的混合可能会混淆用户。我现在已将其添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多