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