
我认为您正在寻找history.pushState网址,该网址可让您进行部分页面加载,并且无论是否带有javascript,它们都具有相同的网址。
例如,假设您的基本url为
http://site.com/With
javascript.htm,以便url更改为
http://site.com/javascript.htm。
#!网址仅适用于javascript,因为#fragment无法在服务器端访问。使用hashbangs时,您的网址应类似于“
http://site.com/#javascript.htm注意”,这
!是不必要的。由于您可以在哈希之后设置任何内容,因此也可以使用url
http://site.com/#!/javascript.htm。
不幸的是,由于IE不支持history.pushState,因此必须将
#!URL作为备用。
两种方法都不会破坏后退按钮,但是必须为每种方法设置不同的URL。
Hashbangs的工作方式如下:
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页面操作。我有这类网址的一个例子。http://timshomepage.net/comic/具有指向许多其他网络漫画的链接,并将它们嵌入到页面的iframe中。禁用javascript后,链接将类似于http://timshomepage.net/comic/dilbert。使用history.pushState,我可以拥有相同的URL。通过hashbang后备,我得到一个这样的URL:http
://timshomepage.net/comic/#!/dilbert