Проблема с document.location.href - PullRequest
1 голос
/ 15 апреля 2010

Я новичок в Javascript и веб-разработке, и у меня есть вопрос, касающийся document.location.href. Я использую куки для хранения языка, который предпочитает пользователь, а затем загружаю английскую или шведскую версию в зависимости от языка. Язык по умолчанию в начале совпадает с языком браузера, а мой index.jsp - шведский. В первый раз все отлично работает. Проблема в том, что cookie уже существует. Основной код:

    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";      
      }
    }

Когда файл cookie существует, мы вводим первое «если», и там, если язык шведский, открывается страница по умолчанию blabla / index.jsp. Когда язык настроен на использование английского языка, он должен открыть blabla / en / index.jsp, но вместо этого он открывает blabla / en / en / index.jsp, что, конечно, неправильно.

Кто-нибудь знает, что я делаю не так? Спасибо

Ответы [ 3 ]

4 голосов
/ 15 апреля 2010

Добавьте косую черту в начале, то есть:

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

В настоящее время вы перенаправляете, используя относительный путь , когда вы хотите перенаправить, используя абсолютный путь . Косые черты в начале всегда означают абсолют.

Если бы вы когда-либо использовали машину Unix, вы бы знали, что /etc/123/abc - это путь, идущий от корня, тогда как etc/123/abc/ будет относительным путем, основанным на текущем каталоге. То же самое и здесь.

2 голосов
/ 15 апреля 2010

Если это коммерческий сайт, и вы заботитесь о своем рейтинге Google, вам следует с осторожностью использовать перенаправления JavaScript.

Сканеры поисковых систем не могут выполнять такие перенаправления. Было бы лучше обработать его на стороне сервера и выполнить истинное перенаправление 301.

Также вы должны дать способ вручную изменить это, нажав кнопку в вашем пользовательском интерфейсе.

Этот код не имеет никакого смысла для меня:

 //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();
}

Хорошо, этот код немного чище, но все равно не имеет особого смысла, потому что вы не включили весь свой код - то есть бит, который извлекает cookie.

0 голосов
/ 15 апреля 2010

Похоже, вы уже на странице в blabla/en/. Проверьте это.

...