2

在我的情况下,用户单击带有“#foobar-popup”href 的链接。我使用那个 onclick 事件来构建一个 iframe,将它注入到 dom 中并显示它。我没有采取任何形式来阻止默认行为,因此将哈希附加到浏览器的地址中。它工作得很好。然后我将“hashchange”事件绑定到窗口。当 $(window).on('hashchange', ...) 被触发时,我查看当前的哈希值。如果它不是以“#foobar-”开头(意味着哈希现在已经消失并且浏览器退回到历史记录中),我会调用一个函数来从 dom 中删除 iframe。这在大多数情况下都有效。但是,每隔一段时间,当我单击“返回”并期望 iframe 消失时,它什么也不做。我在 hashchange 事件上设置了一个警报,告诉我新的哈希是什么。它没有 即使哈希确实发生了变化,也不会被触发。我想这可能混淆了两个不同的窗口(父窗口和新注入的 iframe),但事实并非如此。

在 iframe 中,我不进行任何导航,因此它不应该向历史记录添加任何条目。

顺便说一句,我不喜欢这个解决方案,但考虑到应用程序的当前状态,最好的决定是从 a 点到 b 点,同时为项目增加最少的体积。

我正在使用 jquery-1.8.3。我读过一些历史插件,但它们似乎有点矫枉过正。

下面是监听 hashchange 的代码:

$(window).on('hashchange', function() {
    if (!(location.hash.match("^#foobar-id"))) {
        if ($("#popup-background").length || $("#popup-frame").length) {
            $("#popup-background, #popup-frame").remove();
        }
    }
 });

编辑:更多信息...我正在添加一个 iframe 并将一个 iframe 删除到 dom。我发现当您删除 iframe 时,它​​会弄乱浏览器历史记录,但我无法让它始终如一地发生。我想如果你从 dom 中删除 iframe,它会丢失整个历史的一部分,如果这甚至是一件事..?

4

0 回答 0