【问题标题】:Issue with hash url in javascript?javascript中的哈希url有问题吗?
【发布时间】:2013-04-27 04:46:57
【问题描述】:

我正在使用 url 哈希来滚动页面。我正在做的是,说我有 2 页:

Page1Page2

首先,我从 page1 导航到 page2 并设置 url 哈希值,然后我的 url 将变为:

 http://localhost:48785/page2#id

我正在使用此代码设置哈希:

window.location.hash = "id";

比我按下浏览器后退按钮并转到上一页,即page1。到目前为止一切正常。

当我在 page2 上设置哈希两次时,问题发生了。喜欢:

 http://localhost:48785/page2#id

 http://localhost:48785/page2#id2

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

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

【问题讨论】:

  • 那是因为这些 url 字符串已添加到您的历史记录中。将哈希添加到 url 被视为新 url,因此添加到此历史记录中。因此,它将带您到最后使用的 url。哈希通常用于强制执行此浏览器历史行为。
  • 问题是当我导航到 page2 时,我在 page2 上将 url hash 更改为 id,然后我再次将 url hash 更改为 id2,现在我当前的 url 类似于 http://localhost:48785/page2#id2,现在我开始按下后退按钮。第一次点击我导航到#id,我的网址变成http://localhost:48785/page2#id,第二次点击我除了在page1上导航,我的网址应该是http://localhost:48785/page1,但它会在#id2上导航我,即http://localhost:48785/page2#id2,为什么?
  • 可以说它没有发生就足够了 :-) .. 有一些代码吗?我会尝试设置一些东西,但逻辑与你的说法背道而驰。我很想看看。
  • 我尝试重新创建您的场景,但在多个浏览器中没有看到这种行为。
  • @Daniel 我正在更改document.ready 事件的位置哈希,以滚动到 id 等于哈希值的 div'

标签: javascript jquery


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看起来你可以使用这里描述的历史 API http://www.thecssninja.com/javascript/stealing-history-api

    【讨论】:

      【解决方案3】:

      enter link description hereyou 可以使用 History API 并尝试从浏览器中删除历史记录,以便您摆脱循环

      【讨论】:

        【解决方案4】:

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

        当用户代理应该导航到片段标识符时,用户代理必须运行以下步骤:

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

        2. 删除历史遍历任务源排队的所有任务,这些任务与顶级浏览上下文的文档系列中的任何 Document 对象相关联。

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

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

        这样做是为了使文档中的链接可以像文档之间的链接一样被撤销。如果点击后退按钮仅用于撤消某些链接导航而不是其他链接导航,则可能会导致用户混淆,尤其是当滚动可能会导致显示的内容发生完全变化时。

        【讨论】:

          猜你喜欢
          • 2011-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多