2016-11-17 7 views
3

제 문제로 저를 도울 수 있기를 바랍니다. 정적 HTML 사이트에 3 개 언어가 있습니다. 브라우저 언어 설정에 따라 사용자를 리디렉션하고 싶습니다. 정적 다국어 자바 스크립트 리디렉션이 페이지를 다시로드합니다.

내 코드입니다 :

var lang = navigator.language; 
if (lang == 'pl'){ 
    document.location.href = 'index_pl.html'; 
} 
else if (lang == 'fr'){ 
    document.location.href = 'index_fr.html'; 
} 
else { 
    document.location.href = 'index.html'; 
} 
alert(lang); 

문제는 때마다 사용자가이 스크립트를 상쾌하게 유지하는 웹 사이트를 입력 것이다/사이트를 리디렉션합니다. 내 질문은 사용자 브라우저를 한 번 확인한 다음 사용자를 전용 웹 페이지로 리디렉션하는 방법입니다.

미리 감사드립니다.

답변

2

리디렉션을 계속하지 않으려면 현재 URL의 페이지를 확인해야합니다. 예 :

var lang = navigator.language; 
var redirectURL = 'index.html'; 

if (lang == 'pl'){ 
    redirectURL = 'index_pl.html'; 
} else if (lang == 'fr'){ 
    redirectURL = 'index.html'; 
} 

if (document.location.pathname.indexOf(redirectURL) == -1) { 
    document.location.href = redirectURL; 
} 

이렇게하면 redirectURL이 경로에 없는지 확인합니다.

+0

답변 해 주셔서 감사합니다. 모든 파일은 루트 디렉토리에 있으며 위의 코드는 사용자 브라우저 언어가 무엇인지 확인하고 해당 정보를 기반으로 특정 페이지로 리디렉션됩니다. 사용자가 리디렉션되면 scipt는 사용자 언어를 다시 확인합니다. (무한 루프). 어쩌면 내가 첫 번째 리디렉션 후 URL에 뭔가를 추가해야하거나 어쩌면 localstorage를 사용해야합니까? – Kamil

+0

옵션을 저장하려는 경우 localstorage 또는 쿠키를 사용할 수 있지만 필요하지 않아야합니다. 리다이렉트 중이면 경로 확인과 일치하지 않는 항목이 있습니다. document.location.href를 주석 처리하고 출력 (alert 또는 console.log)에 표시된 내용을 주석 처리하십시오. 예 : alert (document.location.path + "! = /"+ redirectURL) – fanfavorite

+0

은 정의되지 않음을 반환합니다. /index_pl.html 모든 파일은 동일한 루트 디렉토리에 있습니다 – Kamil

0

안녕하세요 여러분, localStorage를 사용하여이 문제를 해결했다고 생각합니다. 아래 코드 : 내가 맞다면

 if (localStorage.getItem("visit") == null) 
{ 
    // Show Welcome message 
    var lang = navigator.language; 
    if (lang == 'pl'){ 
     document.location.href = 'index_pl.html'; 
    } 
    else if (lang == 'fr'){ 
     document.location.href = 'index_fr.html'; 
    } 
    else { 
     document.location.href = 'index.html'; 
    } 
} 

localStorage.setItem("visit", new Date()); 

당신이 내게 조언을 주시겠습니까? 미리 감사드립니다.

+0

이 솔루션의 문제점은 리디렉션하도록 설정된 후에 날짜를 설정한다는 것입니다. 나는 아직도 네가 이것을 필요로하지 않는다고 생각한다. 문자열에서 redirectURL 인스턴스를 확인하기 위해 수정 된 솔루션을 볼 수 있으므로 로컬 호스트에서 작동합니다. 이 유형의 메소드도 작동하지만 리디렉션 전에 항목을 설정해야합니다. if 문 안에 첫 번째 항목을 넣을 수 있습니다. – fanfavorite