【问题标题】:How to rewrite URL without refresh, like GitHub.com如何在不刷新的情况下重写 URL,例如 GitHub.com
【发布时间】:2011-05-21 06:41:43
【问题描述】:

我正在浏览 GitHub.com,在查看存储库的源代码时注意到,当您单击文件时,源代码滑入并且 URL 发生更改,但看起来好像页面没有刷新.有谁知道这是怎么做到的?我已经看到使用 # 符号完成此操作,尤其是在创建 Flash 站点时,但我从未见过像 GitHub 那样完成此操作,没有 #。

这是一个例子: https://github.com/jquery/jquery

单击 .gitattributes 等文本文件之一,然后单击面包屑中的 jQuery 以了解我的意思。

【问题讨论】:

  • 它导航到这里的新页面...
  • 做更多研究,看起来这可能是 webkit/Safari 独有的功能。
  • 在某些浏览器上,页面重绘稍微不那么突兀,所以看起来更流畅,但我认为它正在加载一个新页面。

标签: apache mod-rewrite url-rewriting


【解决方案1】:

Github 使用 window.history.replaceState()

Here你可以看看他们是怎么做的

【讨论】:

  • 太棒了,当我第一次尝试这样做时,这只是我的一个梦想,发现出于安全目的你必须使用哈希技巧。
【解决方案2】:

XMLHttpRequest 用于 Chrome/Webkit 浏览器的客户端,在不刷新页面的情况下获取服务器端资源,并且动态加载内容,并且可以在附加内容期间挂接动画。

我不确定为什么只有 Chrome 是 ajax 的目标,因为通常哈希标记会在以相同方式应用 ajax(如 twitter)时发生变化。

对于动态变化的url,我相信所做的只是location.href被更新了。 再想一想,这可能是一些只有 chrome 支持的新 HTML5 功能。

【讨论】:

  • AJAX 部分并不是我真正感兴趣的,我更感兴趣的是 URL 如何在不刷新页面的情况下发生变化。
  • 是的,是history.pushState
  • 很酷吧?看起来它可以在 Safari、Firefox 和 Chrome 上运行。
  • @Sandro - Fx4?我的 3.5 不使用history.pushState
【解决方案3】:

我发现这篇文章解释了这些 HTML5 功能 - window.history.pushState()、window.history.replaceState() 和 onpopstate() 事件:http://www.spoiledmilk.dk/blog/?p=1922

正如文章所述,Flickr 也在多个地方使用了这种技术。

【讨论】:

  • 链接已失效。你能找到另一个类似的来源吗?
猜你喜欢
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2013-06-04
  • 2017-03-24
  • 2016-05-25
  • 2010-11-04
相关资源
最近更新 更多