2012-03-27 4 views
4

목표 :data 속성의 문자열을 window.location.hash에 올바르게 넣습니다.올바르게 삽입 된 문자열이 window.location.hash에 푸시 될 때 디코딩됩니다.

코드 :

map = {path: $(this).attr('data-path'), rev: $(this).attr('data-rev')}; 
window.location.hash = getMapParams(map); 

function getMapParams(map) { 
    s=""; 
    for(key in map) { 
    value=eval("map."+key); 
    if (s.length > 0) { 
     s+="&"; 
    } 
    s+=encodeURIComponent(key)+"="+encodeURIComponent(value); 
    } 
    return s; 
} 

문제 : 즉시 data-path 속성은 파이어 폭스가 제대로 해시를 넣어 실패에 공백이 포함되어있다. 공간은 인코딩되지 않은 상태로 표시되는 반면 다른 브라우저에서는 정확하게 %20으로 인코딩됩니다.

이상한 단점 : 나는 문자열이 인코딩 된 공간 나와있는 코드를 디버깅합니다.

연구가 수행

: 나는 제대로 파이어 폭스에서 해시를 읽기 위해 많은 솔루션을 발견했다. 한 가지 또는 다른 방법으로 이것은 내 코드로 잘 작동한다.

질문 : 어떻게 내가

+1

페이지를 스크롤하십시오. 대신'_' 또는 뭔가를 사용할 수 있습니까? –

+0

대답이 아닐 수도 있습니다. 그냥 value = map [key];를 사용해보세요. 마지막으로 encodeURIComponent()를 한 번만 반환하십시오. –

+0

모든 공백을 다른 문자로 바꿀 수는 있지만 폴더 및 파일을 가져 오려면 Dropbox API를 사용하는 프런트 엔드입니다. 나는 많은 코드를 변경해야 할 것이다. 그리고 다른 브라우저에서도 정상적으로 작동합니다. 것은 공간이 아니라는 것입니다. 그것은 urlencoded 공간입니다. '/'('% 2F')와 같은 다른 URL 인코딩 된 문자는 그대로 남아 있습니다. – Wilgert

답변

5

하면 window.location.hash 넣어 문자열의 공간 (들)을 urldecoding에서 파이어 폭스를 멈추지 나는 보통이 균일 브라우저에서 아니에요의 때문에 window.location.hash을 피하려고합니다. 파이어 폭스 (대신 20 %의 '예') 주소 표시 줄에서 디코딩 된 해시를 보여주고 있지만, 당신이하려고하면 일을

window.location.hash = "some hash value"; 

을 다음보다는 따라서

나는, 또한

window.location.href = window.location.href.split("#")[0] + "#" + encodeURIComponent("some hash value"); 

할 것 실제로 인코딩 된 주소를 복사하십시오. 따라서 표시되는 것은 URI에있는 내용이 아닙니다.

여담으로

, 나는 항상 다음 코드를 사용하여 해시에 액세스

그것을가`ID를 참조하기로했다 이후 파이어 폭스는`= "", 해시에 공백을 처리하지 않는 것을 매우 논리적이다 이론적으로
var hash_val = window.location.href.split("#")[1] || ""; 
+0

대체로 replace.h 대신 약간의 재 작성과 location.href를 사용합니다. 나는 주소창에 ___을 정말 좋아하지 않는다. 이상하게도, 해시에서 만든 요청에 ​​공간이 포함되어 있기 때문에 그것이 내 코드를 위반 한 것입니다. – Wilgert

+0

"Firefox가 주소 표시 줄 (예 : % 20 대신 '')에서 해독 된 해시를 표시하지만 주소를 복사하려고하면 주소가 실제로 인코딩 됨 - Firefox에서 이상한 동작입니다!고마워, 내 문제가 해결 됐어. – andrewb