2013-04-01 6 views
4

과 같은 웹 응용 프로그램에서 일부 특수 문자가 사용됩니다.Safari의 URL에있는 특수 문자

decodeURI(window.location.hash)을 사용하여 해시를 구문 분석하고 (해시가 인코딩 된 특수 문자를 포함하지 않는 경우도 있음) window.location.hash = "вап"과 같은 새 값을 설정합니다.

Chrome, Firefox, Opera 및 IE에서도 모든 것이 잘 작동하지만 Safari에서는 вап 대신 20?이 표시됩니다.

Safari에서 해시를 window.location.hash = encodeURI("вап");으로 설정하면 작동하지만 Chrome, FF 등에서는 작동하지 않습니다.

+0

(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.hash'를 읽는 것보다 더 신뢰할 수있는 조각을 읽는'location.href'에 접근하고있을뿐 아니라 (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); 
} 
나는 또한 아이폰 OS-6.1.6에 모바일 사파리에서이 같은 비정상적인 동작을 볼 수