history.js正在使用哈希标记重写URL

时间:2014-02-06 19:15:18

标签: javascript history.js

我有jquery history.js工作,但我想强制使用哈希标签。我已尝试设置History.options.html4Mode=true,但这不起作用。

我需要这个的原因是,在页面刷新时,浏览器中的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

1 个答案:

答案 0 :(得分:2)

如果您只是在现有网址上添加哈希值,则应设置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);