window.location.href和程序流的奇怪JavaScript行为
我有一个索引站点,它检查cookie是否存在,以及它是否具有EN值。如果是这样,它应该重定向到English index.shtml。否则,或者如果没有英语cookie,则应重定向到德语下一页: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
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情况。