window.location.href和程序流的奇怪JavaScript行为

window.location.href和程序流的奇怪JavaScript行为,javascript,redirect,location-href,Javascript,Redirect,Location Href,我有一个索引站点,它检查cookie是否存在,以及它是否具有EN值。如果是这样,它应该重定向到English index.shtml。否则,或者如果没有英语cookie,则应重定向到德语下一页: if (document.cookie) { var cookieValue = document.cookie; if (cookieValue.indexOf("MYCOOKIE=EN") > -1) { window.location.href="en/i

我有一个索引站点,它检查cookie是否存在,以及它是否具有EN值。如果是这样,它应该重定向到English 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存在,我用JavaScript alert检查了cookieValue,它显示为EN,但即使不会执行if中的href,但会执行第二个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";
}

如果我离开ELSE,为什么会重定向到hauptkategorie.shtml?

在if之后会有一个正常的Javascript语句

除非你把它放在另一个地方,否则没有什么能告诉你不要运行那个语句

导航到新页面不会终止当前页面的执行,直到新页面实际加载。

可能两个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>

这是否意味着window.localation.href不会立即重定向?正确;它不会终止执行。如果新页面位于速度较慢的服务器上,您可以继续使用上一页一段时间。实际上,何时发生重定向由浏览器决定。因此,只要浏览器想要完成脚本的执行,它就可以轻松地延迟它;这意味着你不应该依赖那里的任何东西。请注意,此代码不会检查其他mycokie=EN情况。