我们使用了一些特殊字符,在我们这样的Web应用程序: example.com/foo#вап
。
我们分析使用哈希decodeURI(window.location.hash)
有时哈希含有不编码特殊字符),并设置如新价值window.location.hash = "вап"
。
一切都在Chrome,Firefox,Opera和IE浏览器甚至工作正常,但在Safari中,我们得到20?
代替вап
。
如果在Safari设定散列喜欢window.location.hash = encodeURI("вап");
它的工作原理,但当然不会在Chrome中,FF等人的作品。
最后,我找到了解决办法。 如果通过设置散列window.location.href
一切工作正常。
下面是代码:
var newHash = ...
var sharpIdx = window.location.href.indexOf("#");
if (sharpIdx === -1) {
window.location.href = window.location.href + "#" + newHash;
} else {
window.location.href = window.location.href.substr(0, sharpIdx) + "#" + newHash;
}
我曾经面临同样的问题,发现了另一个解决办法
window.location.hash = path;
// For safari url change fix
if (window.location.hash !== path) {
window.location.hash = encodeURI(path);
}