2014-02-06 20 views
2

我有jquery history.js工作但我想强制使用散列标签。我试过设置History.options.html4Mode=true但这不起作用。history.js正在改写带有散列标签的网址

我需要这个的原因是页面刷新时,浏览器中的url无效。我正在绕开一个奇怪的后端,并要求这些网址。

什么,当我使用哈希标签的情况是:

1)初始状态:http://localhost/<script_path>/<param1>?get&file=<html_file>

2)History.pushSate(null, null, http://<script_path/<parm>?get&file=<html_file>#/<parm>/<parm>?<more parms>

3)后History.pushState: http://localhost/<parm>/<parm>?<more parms>

编辑:忘了提,如果我删除哈希它完美地追加文件后的所有内容。

编辑2:似乎是历史和jQuery之间的一些互动。我认为历史正在推动我给它的网址。马上通过它。

编辑3:解决。 historyjs不适用于此项目 - 我必须使用location.hash

回答

2

如果您只是在现有URL上添加散列,则应该设置location.hash。使用pushState更改pathName而不重新加载页面。

更新:history.js使用哈希为了支持旧版浏览器。因此,将哈希URL传递给history.js根本没有意义(例如,在旧浏览器上会发生什么?)。

我的建议是使用另一个查询字符串参数来保存新的URL。您将需要编码的任何路径样值:

var path2 = "/script_path/param1?more=params&even_more=params"; 
var newUrl = "/script_path/param1?get&file=html_file&path=" + encodeURI(path2); 
History.pushSate(null, null, newUrl); 

...或者你可以采取的API的优势(无需编码):

var path2 = "/script_path/param1?more=params&even_more=params"; 
var newUrl = "/script_path/param1?get&file=html_file"; 
History.pushSate({path: path2}, null, newUrl); 
+0

谢谢,这确实工作点击链接,但不重装。我的问题仍然是为什么history.js剥离了除了服务器和散列之外的所有内容? – locoMotion

+0

我已经构建了自己的html 5插件,但效果很好,但我需要支持html 4浏览器。这个插件似乎是要走的路,如果我能弄明白O.o – locoMotion

+0

评论太长了,所以我更新了我的答案 –