2013-04-01 4 views
4

Мы используем специальные символы в нашем веб-приложении следующим образом: example.com/foo#вап.Специальные символы в URL-адресе в Safari

Мы анализируем хэш с использованием decodeURI(window.location.hash) (а иногда хеш содержит не кодированные специальные символы) и устанавливаем новое значение, например window.location.hash = "вап".

Все работает отлично в Chrome, Firefox, Opera и даже в IE, но в Safari мы получаем 20? вместо вап.

Если установленный хэш в Safari, как window.location.hash = encodeURI("вап");, он работает, но, конечно, он не работает в Chrome, FF и других.

+0

Я также вижу это же девиантное поведение в Mobile Safari на IOS-6.1.6 (Айпод) и 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 , Хорошо знать. Это более простое решение, чем исправление моего кода для вызова 'encodeURIComponent()' на нужные фрагменты, прежде чем назначать его 'location.hash' ... – binki

0

я столкнулся с аналогичной проблемой, нашел другой обходной

window.location.hash = path; 
// For safari url change fix 
if (window.location.hash !== path) { 
    window.location.hash = encodeURI(path); 
} 
Смежные вопросы