我认为您正在寻找history.pushState url,它允许您进行部分页面加载,并且具有相同的url(带或不带javascript)。
例如,假设您的基本网址是http://site.com/
通过history.pushState,您可以使用javascript将页面修改为javascript.htm
,这样 url 就会变成http://site.com/javascript.htm
.
#!
url 仅适用于 javascript,因为无法在服务器端访问 #fragment。使用 hashbangs,你的 url 会是这样的http://site.com/#javascript.htm
请注意,!
是不必要的。由于您可以在哈希值之后设置任何内容,因此您还可以拥有 urlhttp://site.com/#!/javascript.htm
.
不幸的是,由于IE不支持history.pushState,你必须有#!
url 作为后备。
这两种方法都不会破坏后退按钮,但必须为每种方法设置不同的 url。
Hashbang 的工作原理如下:
function change(){
//page update logic
}
//hashchange event binding
(typeof window.addeventListener === "function")
? window.addEventListener("hashchange", change, false)
: window.attachEvent("onhashchange", change);
//This is how the hash is set
location.hash = "hashstring";
//Accessing it returns the hashstring, with a #
location.hash; //returns #hashstring
History.pushState 有点复杂,因为您将页面的“状态”存储在对象中。
以下是有关此方法的一些很好的参考:
- Javascript:权威指南第六版
- https://developer.mozilla.org/en/DOM/Manipulated_the_browser_history
- http://diveintohtml5.ep.io/history.html
两种方法都需要 JavaScript 页面操作。我有一个此类网址的示例。http://timshomepage.net/comic/具有指向一堆不同网络漫画的链接,并将它们嵌入到页面的 iframe 中。禁用 javascript 后,链接将类似于http://timshomepage.net/comic/dilbert。使用history.pushState,我可以拥有相同的url。通过 hashbang 回退,我得到一个像这样的 url:http://timshomepage.net/comic/#!/dilbert