2013-04-01 58 views
4

我们在我们的Web应用程序中使用了一些特殊字符:example.com/foo#вапSafari中url中的特殊字符

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

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

如果在Safari中设置了像window.location.hash = encodeURI("вап");这样的哈希值,它当然可以工作,但它当然不适用于Chrome,FF等。

+0

我也看到在移动Safari浏览器在iOS-6.1.6此相同的越轨行为(iPod)的和iOS-7.1.1(iPad)。 – binki

回答

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; 
} 
+2

因此,不仅访问用于读取片段的'location.href'比读取'location.hash'更可靠(因为Mozilla处理读取'location.hash'错误),而且因为Safari的写入而更加可靠。很高兴知道。这是一个比解决我的代码更容易的代码解决方案,在将其分配给'location.hash'之前调用'encodeURIComponent()'在正确的块上。 – binki

0

我都面临着同样的问题,发现了另一个解决办法

window.location.hash = path; 
// For safari url change fix 
if (window.location.hash !== path) { 
    window.location.hash = encodeURI(path); 
}