96 javascript jquery browser-history fragment-identifier browser-state
恐怕这可能是不可能的,但有没有办法改变一个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);
}
Run Code Online (Sandbox Code Playgroud)
显然,使用jQuery.这个想法是在这个具体的例子中 1)让用户回过头来更改每个标签可以通过堆积不必要的引用来有效地"打破后退按钮",以及2)如果他们点击刷新,则不保留他们当前所在的选项卡是烦恼.
Mat*_*att 95
location.replace("#hash_value_here");
Run Code Online (Sandbox Code Playgroud)
以上似乎就是你所追求的.
Luc*_*cia 85
location.replace("#hash_value_here");对我来说很好,直到我发现它在IOS Chrome上不起作用.在这种情况下,使用:
history.replaceState(undefined, undefined, "#hash_value")
Run Code Online (Sandbox Code Playgroud)
history.replaceState()的运行方式与history.pushState()完全相同,只是replaceState()修改当前历史记录条目而不是创建新条目.
请记住保持#网址或网址的最后一部分会被更改.
编辑:现在已经有几年了,浏览器也在不断发展.
@Luxiyalu的答案是要走的路
- 旧答案 -
我也认为这是不可能的(此时).但是,如果您不打算使用它,为什么还需要更改哈希值呢?
我认为我们将哈希值用作程序员的主要原因是让用户为我们的页面添加书签,或者在浏览器历史记录中保存状态.如果您不想执行任何操作,那么只需将状态保存在变量中,然后从那里开始工作.
我认为使用哈希的原因是使用一个不受我们控制的值.如果你不需要它,那么它可能意味着你拥有一切在你控制之下,所以只需将状态存储在变量中并使用它.(我喜欢重复自己)
我希望这能够帮到你.也许有一个更容易解决您的问题.
更新: 这个怎么样:
window.history.back(1),这将使历史记录从您的第一个初始哈希返回.您可能必须使用一些标志,以了解当前条目是否可以通过返回"删除",或者您是否只是跳过第一步.并确保,当您强制执行时,"哈希"的加载方法不会执行history.back.
| 归档时间: |
|
| 查看次数: |
40531 次 |
| 最近记录: |