我希望将我的网站转移到完全异步文档加载中,但是我不想使用#!请求处理的方法,因为1)我不想破坏链接,以及2)我想要一种更灵活的处理方式网站获取的URI。
#!
我已经能够为我的网站构建一个简单的MVC,该MVC允许使用通用样式的网址(例如:http://ddrewdesign.com/blog/jquery-is-or-is-child-of- function)来制作正确的要求。
我的问题是:这很容易做到。我想念什么?#!从用户体验的角度来看,当这种方法似乎更有意义时,为什么Gawker和Google选择呢?
编辑
为了澄清起见,最初,我的网站仅使用querystring方法(no mod_rewrite)来检索请求。这些链接遍布网络,我无法中断。我的理解是,如果我转为使用hashbang方法,他们会这样做。再说一次:这可能是我困惑的一部分,所以我并不是说我已经考虑了所有问题。我要问的是我所缺少的东西,因为到目前为止,我所读的任何内容似乎都无法容纳该查询字符串。
mod_rewrite
我认为您正在寻找history.pushState网址,该网址可让您进行部分页面加载,并且无论是否带有javascript,它们都具有相同的网址。
例如,假设您的基本url为http://site.com/With history.pushState,则可以使用javascript将页面修改为javascript.htm,以便url更改为http://site.com/javascript.htm。
http://site.com/
javascript.htm
http://site.com/javascript.htm
#!网址仅适用于javascript,因为#fragment无法在服务器端访问。使用hashbangs时,您的网址应类似于“ http://site.com/#javascript.htm注意”,这!是不必要的。由于您可以在哈希之后设置任何内容,因此也可以使用url http://site.com/#!/javascript.htm。
http://site.com/#javascript.htm
!
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