2010-04-15 11 views
1

저는 Javascript 및 웹 개발을 처음 사용하며 document.location.href와 관련하여 질문이 있습니다. 사용자가 선호하는 언어를 저장하기 위해 쿠키를 사용하고 언어에 따라 영어 또는 스웨덴어 버전을로드합니다. 처음에는 기본 언어가 브라우저의 언어와 같고 내 index.jsp는 스웨덴어입니다. 처음에는 모든 것이 잘 작동합니다. 문제는 쿠키가 이미 존재하는 경우입니다. 기본 코드는 다음과 같습니다 document.location.href의 문제점

if (language!=null && language!=""){ 
     if (language=="en-US" || language=="en-us") 
     document.location.href = "en/index.jsp"; 
    } 
    else{ 
//Explorer 
if (navigator.userLanguage) 
    language = navigator.userLanguage; 

//other browsers 
else 
    language = (navigator.language) ? navigator.language : navigator.userLanguage; 

if (language!=null && language!=""){ 
    setCookie('language', language, 365, '/', 'onCheck'); 

if (language=="en-US" || language=="en-us") 
    document.location.href = "en/index.jsp"; 

else if(language=="sv") 
    document.location.href="index.jsp";  
     } 
    } 

쿠키는 우리가 입력 존재

최초의 언어는 스웨덴어의 경우, 거기에, 그것은 기본 blabla/index.jsp에서 페이지를 엽니 다 "만일". 언어가 engish로 설정되면 blabla/en/index.jsp가 열리고 blabla/en/en/index.jsp가 열립니다. 물론 잘못된 것입니다.

내가 뭘 잘못하고 있는지 아는 사람이 있습니까 ?? 감사

답변

4

즉, 처음에 슬래시를 추가 : 현재

document.location.href = "/en/index.jsp";

, 당신은 당신이 절대 경로를 사용하여 리디렉션 할 때 상대 경로를 사용하여 리디렉션. 처음에는 슬래시가 항상 절대를 의미합니다.

유닉스 컴퓨터를 사용 해본 적이 있다면 /etc/123/abc은 루트에서 오는 경로 인 반면, etc/123/abc/은 현재 디렉토리에 빌드 된 상대 경로입니다. 여기도 마찬가지입니다.

0

페이지에 이미있는 것 같습니다. blabla/en/입니다. 그것을 확인하십시오.

2

상업용 사이트인데 Google 순위에 신경 쓰면 JavaScript 리디렉션 사용에주의해야합니다.

검색 엔진 크롤러는 이러한 종류의 리디렉션을 수행 할 수 없습니다. 서버 측에서 처리하고 진정한 301 리디렉션을 수행하는 것이 좋습니다.

또한 UI에서 버튼을 클릭하여 수동으로 변경할 수있는 방법을 제공해야합니다.

이 코드는 나에게 어떤 이해가되지 않습니다 :

//Explorer 
if (navigator.userLanguage) 
    language = navigator.userLanguage; 

//other browsers 
else 
    language = (navigator.language) ? navigator.language : navigator.userLanguage; 

이 .userLanguage가 채워져 있는지 확인하는 것하고 밤은 경우 .language가 채워지는 경우는 확인하고 그렇지 않은 경우는 사용 이 시점에서 이미 정의되지 않은 것으로 간주 된 .userLanguage. - 비트 즉

if (IsCookieSet()) { 
    if (IsCookieLanguage("en-US")) { 
     document.location.href = "en/index.jsp"; 
    } 
} 
else { 
    language = navigator.userLanguage ? navigator.userLanguage : navigator.language; 

    if (!IsCookieSet()){ 
     setCookie('language', language, 365, '/', 'onCheck'); 

    if (IsCookieLanguage("en-US")) { 
     document.location.href = "en/index.jsp"; 
    } 
    else if(IsCookieLanguage("sv")) 
    { 
     document.location.href="index.jsp";  
    } 
    } 
} 


function IsCookieSet() 
{ 
    return language!=null && language!=""; 
} 

function IsCookieLanguage(lang) 
{ 
    return language.toLowerCase() == lang.toLowerCase(); 
} 

그럼 그 코드가 조금 청소기하지만 당신은 당신의 모든 코드를 포함하지 않았기 때문에 여전히 많은 이해가되지 않습니다 :

이 같은 코드 뭔가를 리팩토링 것입니다 쿠키를 검색합니다.