首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >你能在不影响历史的情况下使用散列导航吗?

你能在不影响历史的情况下使用散列导航吗?
EN

Stack Overflow用户
提问于 2010-02-21 14:29:21
回答 4查看 47.3K关注 0票数 102

我担心它可能是impossible,但是有没有一种方法可以改变URL 的散列值,而不在浏览器的历史中留下一个条目,而不需要重新加载?或者做同样的事情?

就具体而言,我正在开发一些基本的散列导航,如下所示:

代码语言:javascript
复制
//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)如果他们点击刷新,不保留他们当前所在的选项卡是一种恼人的事情。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-29 10:39:14

location.replace("#hash_value_here");在我身上运行得很好,直到我发现它在IOS Chrome上不起作用。在这种情况下,请使用:

代码语言:javascript
复制
history.replaceState(undefined, undefined, "#hash_value")

history.replaceState()的操作与history.pushState()完全相同,不同之处在于replaceState()修改当前的历史记录条目,而不是创建新的历史记录条目。

记住保留#,否则url的最后部分将被更改。

票数 107
EN

Stack Overflow用户

发布于 2011-08-05 01:08:20

代码语言:javascript
复制
location.replace("#hash_value_here"); 

上面的代码似乎就是你想要的。

票数 103
EN

Stack Overflow用户

发布于 2010-02-21 15:41:17

编辑:现在已经有几年了,浏览器也在发展。

@Luxiyalu的answer是必由之路

--旧答案--

我也认为(在这个时候)这是不可能的。但是,如果您不打算使用散列值,为什么还要更改它呢?

我相信我们作为程序员使用散列值的主要原因是让用户为我们的页面添加书签,或者在浏览器历史记录中保存一个状态。如果您不想这样做,那么只需将状态保存在一个变量中,并从那里开始工作。

我认为使用散列的原因是为了处理我们无法控制的值。如果你不需要它,那么它可能意味着一切都在你的控制之下,所以只需将状态存储在一个变量中并使用它。(我喜欢重复我自己)

我希望这能帮到你。也许有一个更简单的方法来解决你的问题。

更新:这个怎么样:

  1. 设置第一个哈希,并确保将其保存在浏览器历史记录中。
  2. 选择新选项卡后,执行window.history.back(1)操作,这将使历史记录从第一个初始化哈希返回。
  3. 现在您设置了新哈希,因此制表符只会在历史记录中创建一个条目。

您可能需要使用一些标志,以了解是否可以通过返回来“删除”当前条目,或者是否可以跳过第一步。并确保当您强制history.back时,您的“散列”加载方法不会执行。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2305069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档