分配给document.location.href而不破坏历史记录

时间:2009-05-14 17:24:27

标签: javascript

在测试document.location.href时,我观察到当用户启动导致javascript分配给document.location.href的操作时,新的URL将被添加到历史记录中。

但是,如果通过javascript启动调用,例如,XMLHTTPRequest的状态更改,则会覆盖历史记录中当前页面的条目。我有正确的特征吗?在后一种情况下,有没有办法让页面更改反映在历史记录中?

6 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,发现这个解决方法对我有用

而不是

function onAjaxCallback(evt){
    location.href=newLocation;
}

我围绕setTimeout包装了location.href调用。似乎可以做到这一点。我的历史现在表现得很好。希望有所帮助

function onAjaxCallback(evt){
    setTimeout(function(){
        location.href=newLocation;
    },0)
}

答案 1 :(得分:4)

您可以在不让浏览器显示“返回”按钮的情况下更改位置:

window.location.replace(new_url);

但是,原始地址仍保留在浏览器的历史记录中,可以使用 CTRL + H

等方式访问

参考:

答案 2 :(得分:2)

学习:window.location.replace()window.location.assign()

答案 3 :(得分:1)

更仔细地阅读原始问题。问题不是关于XHR加载的内容,而是关于由XHR加载的脚本加载的内容。我有同样的问题,setTimeout方法似乎运作良好。

答案 4 :(得分:1)

在重定向用户之前,可以手动将URL添加到历史记录中。

if (window.history) {
    history.pushState({}, window.location.href);
}
window.location.replace("/login/?next=" + window.location.pathname);

答案 5 :(得分:-1)

唉,你的问题无法回答,AJAX请求与浏览器历史记录无关,如果你用它们加载了一些动态内容,那么用户点击浏览器后退按钮, previous 页面已加载(这是加载了普通的GET或POST请求),这会破坏您显示内容的顺序。

Dmitri的答案意味着您将使用网址的片段部分(在#符号后面)维护您自己的动态内容历史记录,也许您将提供自己的后退和前进按钮,但您仍然不是保护免受浏览器后退和前进按钮的影响。

如果只是他们提供某种事件来处理用户点击这些按钮并能够取消。