Странное поведение JavaScript с window.location.href и потоком программы - PullRequest
0 голосов
/ 31 октября 2011

У меня есть индексный сайт, который проверяет, существует ли файл cookie и имеет ли он значение EN. Если это так, он должен перенаправить на английский index.shtml. В противном случае или при отсутствии (английского) файла cookie, он должен быть перенаправлен на следующую страницу на немецком языке:

if (document.cookie)  {
    var cookieValue = document.cookie;
    if (cookieValue.indexOf("MYCOOKIE=EN") > -1)  {
        window.location.href="en/index.shtml";
    }
}
window.location.href="kategorien/hauptkategorie.shtml";

Теперь происходит нечто очень странное: существует файл cookie на английском языке (я проверил cookieValue с предупреждением JavaScript, и он показывает EN), но хотя href внутри if не будет выполнен, а 2-й href будет быть казненным. Почему это так?

Когда я добавляю 2 else с, он работает как ожидалось:

if (document.cookie)  {
     var cookieValue = document.cookie;
     if (cookieValue.indexOf("MYCOOKIE=EN") > -1)  {
         window.location.href="en/index.shtml";
     }
     else  {
         window.location.href="kategorien/hauptkategorie.shtml";
     }
}
else  {
     window.location.href="kategorien/hauptkategorie.shtml";
}

Почему это так, что он перенаправляет на hauptkategorie.shtml, если я оставляю else с?

Ответы [ 2 ]

4 голосов
/ 31 октября 2011

У вас есть нормальный оператор Javascript после if.

. Ничто не говорит этому оператору о том, что он не должен выполняться, если вы не поместите его в else.

Переход на новую страницу не прекращает выполнение текущей страницы, пока новая страница фактически не загрузится.

3 голосов
/ 31 октября 2011

Возможно, оба оператора window.location.href выполняются, давая неожиданные результаты. Попробуйте что-то вроде:

<script type="text/javascript"> 
if (document.cookie && document.cookie.indexOf("MYCOOKIE=EN") > -1)  {
    window.location.href="en/index.shtml";  
}
else {
    window.location.href="kategorien/hauptkategorie.shtml";
}
</script>
...