如果... else'语句无限循环,则基于浏览器语言的JS重定向

时间:2019-04-04 09:53:47

标签: javascript

我已经写了一小段代码以基于浏览器语言进行重定向,但是如果我使用原始URL,则代码的“其他”部分将无限循环。

我已经对其进行了测试,如果我将其重定向到其他URL时,它就像一个超级按钮一样工作,因此我假设它与尝试将其重定向回原始URL有关,但不确定如何阻止它。 Break / Continue和console.log可以工作,但是前两个是非法的,显然,我不能离开console.log:SI必须告诉if / else语句本质上停止或如果第一个条件为false则“停留在页面上” 。

有人可以告诉我如何解决此问题,以便将浏览器语言设置为法语时,重定向ELSE保留在原始URL上吗?

<!-- language redirect -->
    <script>
        userLang = navigator.language || navigator.userLanguage;

    if (userLang == "fr") {
        window.location.href = "http://www.website.com/fr";

    }
    else {
        console.log('null'); *** THIS WORKS but is not right

window.location.href = "http://www.website.com"; *** THIS DOESN'T WORK gets stuck in a loading loop infinitely

window.location.href="http://www.someotherwebsite.com"; ***THIS WORKS but doesn't achieve my purpose
}
</script>

如果浏览器语言是法语,请重定向到法语网站(子目录)ELSE,不执行任何操作,并停留在英语网站上。

3 个答案:

答案 0 :(得分:0)

由于此脚本仅将在英语页面中实现,因此您无需为else语句传递任何内容。

userLang = navigator.language || navigator.userLanguage;

if (userLang == "fr") {
    window.location.href = "http://www.website.com/fr";
}

对于法语页面,只需将“ fr”更改为“ en”。

答案 1 :(得分:0)

当您将网址分配给window.location.href属性时,即使将其设置为您当前使用的网址,也会加载指定的网址。如果该语言不是法语,则会导致浏览器不断重新加载您的网站。

来自MDN

  

每当将新值分配给位置对象时,都将使用URL加载文档,就像使用修改后的URL调用location.assign()一样。请注意,安全设置(例如CORS)可能会阻止这种情况的发生。

要解决您的问题,当您已经位于用户语言的正确页面上时,请勿设置window.location.href属性。

答案 2 :(得分:-1)

这只是一个逻辑问题。如果已经在其中,为什么还要重定向到该URL? 只需额外检查一下,是否已经在下面的正确网址中

<script>
        userLang = navigator.language || navigator.userLanguage;

    if (userLang == "fr" && window.location.href!= "http://www.website.com/fr") {

        window.location.href = "http://www.website.com/fr";

    }
    else {

       if(window.location.href != "http://www.website.com") {
             window.location.href = "http://www.website.com";
       }

    }

</script>