尝试window.location或window.location.href重定向会导致循环

时间:2019-02-25 12:49:33

标签: javascript html

我正尝试使用javascript来确定用户是否使用某种语言,以及他们是否未使用英语,那么该页面将加载我已从url中获取的参数的另一页BUT 。

我已经能够使用参数加载页面,但是即使浏览了无数其他示例,例如thisthis,我仍然陷入了重新加载页面的循环。

function locateUserLanguage() {

    var languageValue = (navigator.languages ? navigator.languages[0] : (navigator.language || navigator.userLanguage)).split('-');

        var url = window.location.href.split('?');
        var baseUrl = url[0];
        var urlParams = url[1];


    if (languageValue[0] === 'en') {

        console.log('no redirect needed, stay here.');

    } else {


        // I tried to set location into a variable but also wasn't working.
        // var newURL = window.location.href.replace(window.location.href, 'https://www.mysite.dog/?' + urlParams);


        window.location.href = 'https://www.mysite.dog/?' + urlParams
    }

} locateUserLanguage();

我尝试放置return true;return false;,但都没有停止循环。

我尝试过window.location.replace();并将window.location.href设置为我需要的值,但是它一直在循环。

1 个答案:

答案 0 :(得分:3)

加载此功能的脚本有可能在您的两个页面(英语和非英语)中均执行。因此,一旦页面加载完毕,就会在英语和非英语网站中执行locateUserLanguage函数,从而导致无限循环。

在调用locateUserLanguage函数之前,您需要检查一下。

假设英语网站的网址=“ www.myside.com”,非英语网站的网址为“ www.myside.aus”。因此条件必须是

if (window.location.host === "www.myside.com") { locateUserLanguage() }

这将确保仅在英语网站中调用locateUserLanguage。

或者其他方法可以仅在英语网站中加载此脚本,这将避免使用条件语句。

希望有帮助。如有任何疑问,请回复。