散列URL在JavaScript中的问题?

问题描述:

我正在使用网址哈希滚动页面。什么我做的是,说我有2页:散列URL在JavaScript中的问题?

Page1Page2

首先,我从page1导航到page2并设置URL哈希比我的网址将变为:

http://localhost:48785/page2#id 

我使用此代码设置哈希:

window.location.hash = "id"; 

比我按浏览器后退按钮,并去了之前页面,即page1。高兴这一点万物工作正常。

当我在页面2上设置哈希两次时,发生此问题。像:

http://localhost:48785/page2#id 

http://localhost:48785/page2#id2 

现在,当我按浏览器后退按钮,它只是在#id和#id2之间来回导航。

为什么在第2页上设置哈希两次后,后退按钮不会将我带到上一页,即page1?

+1

这是因为这些网址字符串被添加到您的历史记录。向网址添加哈希值会被视为新的网址,因此会添加到此历史记录中。因此它会把你带到最后使用的网址。哈希通常用于强制浏览器历史记录行为。 – Daniel 2013-04-27 04:54:10

+0

问题是当我导航到第2页,比第2页上我更改网址哈希id,比我再次更改网址哈希id2,现在我当前的网址是类似'http:// localhost:48785/page2#id2',现在我开始按回来button.On第一次点击我导航到#id和我的网址变成'http:// localhost:48785/page2#id',第二次单击我例外导航page1和我的网址应该是'http://localhost:48785/page1',但它会在#id2上导航我,例如'http:// localhost:48785/page2#id2',为什么? – user1740381 2013-04-27 04:58:49

+0

这是否足以说它没有发生:-) ..有一些代码?我会尝试设置一些东西,但是逻辑与您的说法不符。我很想看到它。 – Daniel 2013-04-27 05:31:28

这就是浏览器后退按钮应该工作的方式。它返回到browsers history中的最后一个url更改。

它看起来像您可以使用历史API喜欢这里描述http://www.thecssninja.com/javascript/stealing-history-api

enter link description here可以纪录API和尝试,并从浏览器中删除历史记录,以便你可以退出循环

因为HTML5 : 6.6.9 : Navigating to a fragment identifier说:

当用户代理被认为导航到一个片段标识符,则用户代理必须执行下面的步骤:

  1. 删除当前条目后浏览上下文会话历史记录中的所有条目。如果当前条目是会话历史记录中的最后一个条目,则不会删除条目。 这不一定必须影响用户代理的用户界面。

  2. 删除历史遍历任务源排队的任何与顶层浏览上下文的文档系列中的任何Document对象关联的任务。

  3. 在表示新资源及其Document对象和相关状态的History对象末尾追加一个新条目。其URL必须设置为用户代理正在导航的地址。标题必须保持不变。

  4. 将历史记录移至新条目,并设置异步事件标志。这将滚动到现在文档地址中给出的片段标识符。

这样做是为了让文档内的链接可以在文档之间可以连接相同的方式备份出来的。如果点击后退按钮仅作为某些链接导航的撤消,而不是其他链接导航,则可能会导致用户混淆,特别是滚动可能导致显示的内容发生完全更改时。