【发布时间】:2026-01-30 08:30:01
【问题描述】:
恐怕它可能是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)不保留他们是哪个选项卡当前在如果他们点击刷新是一个烦恼。
【问题讨论】:
-
如果您不想跟踪历史记录,为什么要更改哈希? :|
-
因为在刷新时最好向用户显示他们所在的选项卡,但是由于他们可能在选项卡之间来回翻转,这会使他们的历史记录出现不必要的条目,使返回按钮其实用处不大。不过,这只是一个示例——它可能适用于您需要保存临时状态但又不想依赖 cookie 或用它们填充用户的临时文件的任何时候。刷新时,js内容和你离开的一样——你没有离开页面,也不是跳转点或伪页面,所以历史条目只能干扰标准nav。
标签: javascript jquery browser-history fragment-identifier browser-state