【问题标题】:How could I change window's location without reloading and # hack?如何在不重新加载和 # hack 的情况下更改 Windows 位置?
【发布时间】:2011-04-29 04:07:11
【问题描述】:

起初我认为 hash hack 是必需的,但从 facebook 最近的更新来看,我不这么认为。

最初的 hash hack(我不确定这是否是正确的术语)是通过更改 location.hash,可以在不刷新页面的情况下在 URL 中保存状态。这被谷歌的应用程序、Facebook 以及最近的#NewTwitter 广泛使用。但是今天我注意到如果您使用“现代”浏览器(如 chrome 或 firefox),Facebook 不再有这个“#”。我分别使用开发者工具和萤火虫仔细检查了它们没有重新加载。

通过在 stackoverflow 中进行最少的搜索,最接近解决方案的是使用 Flash - 但是我禁用了 Flash 并且 facebook.com 仍然像魅力一样工作。 从 chrome 8 dev 和 firefox 4 beta 的覆盖率来看,我想知道这可能与 HTML5 时代的 API 有关,但我无法调试 Facebook 中的代码以了解它们的作用。

既然这就像我在这里问的第一个问题,我想知道你们中是否有人已经解决了这个问题。

谢谢大家。

附:无法在 IE8 上运行,尚未在 IE9 beta 上测试。

【问题讨论】:

  • 什么“不适用于 IE8”? :) 这包含在 Google 的 AJAX 抓取指南中。他们在gwt.google.com/samples/Showcase/Showcase.html 有一个展示柜,可能在这里有用。
  • 我不知道这是否是答案,但HTML5中有client-side data storage。也许这被利用了。在 Safari(我假设是 Chrome)中,开发人员工具有一个“存储”部分。也许这会给出一些提示。

标签: javascript ajax facebook url history


【解决方案1】:

Facebook 正在使用 HTML5 中的历史 API。从this blog post 你可以看到它是如何工作的。基本上他们正在拨打如下电话来更改网址而不重新加载页面。

window.history.pushState("object or string", "Title", "/new-url");

这是关于它的 HTML5 工作草案规范:http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#the-location-interface

遗憾的是,IE9 不支持此 api。新版本的 Chrome 和 FF 全面支持。

【讨论】:

  • 感谢您的回答,我认为我需要更深入地研究开发规范。 -> dev.w3.org/html5/spec/history.html
  • 我刚刚找到了这个 jquery 插件,你可能想看看。处理这个似乎相当不错,而且它在处理不支持 HTML5 的浏览器时会降级。 asual.com/jquery/address
  • ie9 怎么样。如何在ie9中做到这一点
猜你喜欢
  • 2021-01-10
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2020-12-29
  • 1970-01-01
  • 2017-08-06
相关资源
最近更新 更多