Safari中url中的特殊字符

Gre*_*bin 4 safari uri special-characters

我们在Web应用程序中使用了一些特殊字符,如下所示:example.com/foo#???.

我们解析哈希使用decodeURI(window.location.hash)(有时哈希包含未编码的特殊字符)并设置新值window.location.hash = "???".

一切都在Chrome,Firefox,Opera和IE浏览器甚至工作正常,但在Safari中,我们得到20?代替???.

如果在Safari中设置hash就像window.location.hash = encodeURI("???");它有效,但当然它在Chrome,FF和其他设备中不起作用.

Gre*_*bin 5

最后我找到了解决方案.如果设置哈希通过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;
}
Run Code Online (Sandbox Code Playgroud)

  • 所以不仅访问`location.href`来读取片段比读取`location.hash`更可靠(因为Mozilla处理读取`location.hash`错误),但写入它以进行散列更新因为Safari更可靠.很高兴知道.这是一个更容易编码的解决方案,而不是修复我的代码,在将它们分配给`location.hash`之前调用右边的`encodeURIComponent()`... (2认同)