当前位置: 代码迷 >> JavaScript >> 尝试使用window.location或window.location.href重定向导致循环
  详细解决方案

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

热度:64   发布时间:2023-06-05 14:16:45.0

我正在尝试使用javascript来确定用户是否使用某种语言,如果他们没有使用英语,那么页面加载不同的页面,但我从网址抓取的参数。

我已经能够使用params加载页面,但是我继续陷入重新加载页面的循环中,即使在浏览了无数其他示例之后,例如: 或 。

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直接设置为我需要的,但它继续循环。

编写此函数的脚本有可能在加载时在您的两个页面(英语和非英语)中执行。 因此,只要加载页面,就会在英语和非英语网站中执行locateUserLanguage函数,从而导致无限循环。

您需要在调用locateUserLanguage函数之前进行检查。

假设英文网站有url =“www.myside.com”,非英文网站有网址“www.myside.aus”。 所以条件需要

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

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

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

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

  相关解决方案