2013-04-01 88 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); 
}