我担心它可能是impossible,但是有没有一种方法可以改变URL 的散列值,而不在浏览器的历史和中留下一个条目,而不需要重新加载?或者做同样的事情?
就具体而言,我正在开发一些基本的散列导航,如下所示:
//hash nav -- works with js-tabs
var getHash = window.location.hash;
var hashPref = "tab-";
function useHash(newHash) {
//set js-tab according to hash
newHash = newHash.replace('#'+hashPref, '');
$("#tabs li a[href='"+ newHash +"']").click();
}
function setHash(newHash) {
//set hash according to js-tab
window.location.hash = hashPref + newHash;
//THIS IS WHERE I would like to REPLACE the location.hash
//without a history entry
}
// ... a lot of irrelavent tabs js and then....
//make tabs work
$("#tabs.js-tabs a").live("click", function() {
var showMe = $(this).attr("href");
$(showMe).show();
setHash(showMe);
return false;
});
//hash nav on ready .. if hash exists, execute
if ( getHash ){
useHash(getHash);
}
显然,使用的是jQuery。这个想法是,在这个特定的例子中,1)让用户返回每一个选项卡更改可以通过堆积不必要的引用而有效地“打破后退按钮”,以及2)如果他们点击刷新,不保留他们当前所在的选项卡是一种恼人的事情。
发布于 2014-05-29 10:39:14
location.replace("#hash_value_here");
在我身上运行得很好,直到我发现它在IOS Chrome上不起作用。在这种情况下,请使用:
history.replaceState(undefined, undefined, "#hash_value")
history.replaceState()的操作与history.pushState()完全相同,不同之处在于replaceState()修改当前的历史记录条目,而不是创建新的历史记录条目。
记住保留#
,否则url的最后部分将被更改。
发布于 2011-08-05 01:08:20
location.replace("#hash_value_here");
上面的代码似乎就是你想要的。
发布于 2010-02-21 15:41:17
编辑:现在已经有几年了,浏览器也在发展。
@Luxiyalu的answer是必由之路
--旧答案--
我也认为(在这个时候)这是不可能的。但是,如果您不打算使用散列值,为什么还要更改它呢?
我相信我们作为程序员使用散列值的主要原因是让用户为我们的页面添加书签,或者在浏览器历史记录中保存一个状态。如果您不想这样做,那么只需将状态保存在一个变量中,并从那里开始工作。
我认为使用散列的原因是为了处理我们无法控制的值。如果你不需要它,那么它可能意味着一切都在你的控制之下,所以只需将状态存储在一个变量中并使用它。(我喜欢重复我自己)
我希望这能帮到你。也许有一个更简单的方法来解决你的问题。
更新:这个怎么样:
window.history.back(1)
操作,这将使历史记录从第一个初始化哈希返回。您可能需要使用一些标志,以了解是否可以通过返回来“删除”当前条目,或者是否可以跳过第一步。并确保当您强制history.back
时,您的“散列”加载方法不会执行。
https://stackoverflow.com/questions/2305069
复制相似问题