我有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
答案 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);