如何重新加载当前页面一次而不更改javascript中的URL?

问题描述 投票:0回答:1

我正在使用以下javascript代码为用户访问我的网站时设置语言Cookie:

function setCookie(name, value, expires) {
    var expires = "";
    if(expires) {
        var date = new Date();
        date.setTime(date.getTime() + (expires * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
}
function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while(c.charAt(0) == ' ') {
            c = c.substring(1, c.length);
        }
        if(c.indexOf(nameEQ) == 0) {
            return c.substring(nameEQ.length, c.length);
        }
    }
    return null;
}
function delCookie(name) {
    document.cookie = name+'=; expires=Wed, 31 Dec 1969 23:59:59 GMT; path=/'; // expires=-1
}

// After the page has finished loading, check that the user already has a language cookie?
document.addEventListener('DOMContentLoaded', function() {
    var lang = navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage;
    lang = lang.slice(0, 2).toLowerCase();
    if(!getCookie('language')) { // If not, set language cookie
        if(lang == 'vi') {
            setCookie('language', 'vi');
        }
        else {
            setCookie('language', 'en');
        }
    }
    if(getCookie('language')) { // If the user already has a language cookie
        if(getCookie('language') != 'vi' || getCookie('language') != 'en') { // If the user's language cookie is not supported
            setCookie('language', 'en'); // Then use English as the default
        }
    }
}, false);

现在,我想为用户设置语言cookie后,将在不更改URL的情况下重新加载当前页面一次(不添加哈希#,参数等。]

我尝试设置cookie,然后使用location.reload(),重新加载后将删除cookie,如下所示:

// ... Skip Cookie Code ...
document.addEventListener('DOMContentLoaded', function() {
    var lang = navigator.language || navigator.browserLanguage || navigator.userLanguage || navigator.systemLanguage;
    lang = lang.slice(0, 2).toLowerCase();
    if(!getCookie('language')) {
        if(lang == 'vi') {
            setCookie('language', 'vi');
            setCookie('needreload', 'yes');
        }
        else {
            setCookie('language', 'en');
            setCookie('needreload', 'yes');
        }
    }
    if(getCookie('language')) {
        if(getCookie('language') != 'vi' || getCookie('language') != 'en') {
            setCookie('language', 'en');
            setCookie('needreload', 'yes');
        }
    }
    if(getCookie('needreload') == 'yes') {
        location.reload();
        delCookie('fc_reload');
    }
}, false);

但是,这使我的网站无限制地不断刷新,而不仅仅是一次。

请向我展示解决此问题的方法。感谢您提供的解决方案!

javascript
1个回答
0
投票

needreload之前尝试将"no" cookie的值设置为location.reload()

if(getCookie('needreload') == 'yes') {
        setCookie('needreload', 'no');
        location.reload();
        delCookie('fc_reload');
      //im not sure delCookie fc_reload will be executed 
      //as page will pe refreshed and control goes off
 }
© www.soinside.com 2019 - 2024. All rights reserved.