使用HTML5 History API处理哈希

Cam*_*ron 6 javascript jquery html5 history.js

我在这里使用history.js插件:https://github.com/browserstate/history.js/用于处理我的应用程序中的HTML5历史记录.我想处理二者 HTML5和HTML4的版本(使用散列后备).

你可以在这里看到演示:http://dev.driz.co.uk/history45/


问题1

当一个人访问带有哈希的网址时(如果没有点击网站上的链接),我如何根据哈希加载正确的内容?因为服务器将无法理解代码是什么,我不想必须通过检查哈希是否存在然后通过AJAX调用内容来使请求加倍.例如:http://dev.driz.co.uk/history45/#about.php不加载about.php内容.

更新:

我在这里看到了一些例子:https://gist.github.com/balupton/858093这似乎涵盖了加载正确的内容(甚至是优化版本).但我正在努力让它与我的HTML5版本结合使用.查看源:http://dev.driz.co.uk/history45/它只在个人点击链接而不是页面加载时运行,这是原始问题.

更新2:

在这里尝试了一个例子:http://dev.driz.co.uk/history4/#/contact.php,使用源代码中的代码段来获取要在contact.php内容中加载的内容,但是不起作用......?但根据这篇文章:https://github.com/browserstate/history.js/wiki/Intelligent-State-Handling#wiki-why-the-hashbang-is-unnecessary这段代码应该是AJAX加载正确的内容如果它有哈希值.有什么想法吗?


问题2

如何强制/#/在root上并使用`#/'为所有URL添加前缀

目前,如果您尝试通过HTML4浏览器中的链接访问页面,您最终会得到如下奇怪的网址:

http://dev.driz.co.uk/history45/#contact.phphttp://dev.driz.co.uk/history45/#./

代替:

http://dev.driz.co.uk/history45/#/contact.phphttp://dev.driz.co.uk/history45/#/


如果我从内页开始:

http://dev.driz.co.uk/history45/contact.php并选择一个链接然后我最终得到:http://dev.driz.co.uk/history45/contact.php#about.php当它应该是什么时:http://dev.driz.co.uk/history45/#/about.php

Que*_*tin 3

当一个人访问带有哈希值的网址(未单击网站上的链接)时,如何根据哈希值加载正确的内容,因为服务器无法理解代码是什么

服务器不会看到#或后面的任何内容

我不想通过检查哈希是否存在然后通过 AJAX 调用内容来加倍请求。

您唯一的其他选择是重定向(通过locationJavaScript 设置)到您在历史 API 可用时将使用的 URL。

如何在根目录上强制使用/#/?

location如果不支持历史 API,您必须重定向到主页(再次通过设置)。


我认为,如果他们使用不支持历史记录 API 的浏览器(这可能意味着现在的 Windows XP 和 IE 8),那么他们可以获得非 Ajax 回退,而我永远不必处理哈希 hack 。