javascript - 如何在不更改 javascript 中的 URL 的情况下重新加载当前页面一次?
问题描述
当用户访问我的网站时,我正在使用以下 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 的情况下重新加载当前页面一次(不添加 hash #
、参数...)。
我尝试设置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('needreload');
}
}, false);
但是,这使我的网站不断地重新加载,而不仅仅是一次。
请告诉我解决这个问题的方法。我将不胜感激您提供的解决方案!
解决方案
我发现问题,是代码检查用户的语言cookie是否支持有问题。我必须使用&&
而不是||
那里。如果我使用||
,那么true
即使支持用户的语言 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(lang == 'vi') {
setCookie('language', 'vi');
}
else {
setCookie('language', 'en');
}
setCookie('needreload', '1');
}
if(getCookie('language')) { // If it already exists
if(getCookie('language') != 'vi' && getCookie('language') != 'en') { // Use && instead of || will make it work
setCookie('language', 'en');
setCookie('needreload', '1');
}
}
if(getCookie('language') == '1') {
location.reload();
delCookie('needreload');
}
}, false);
推荐阅读
- apache - 在 Apache 2.4 上将 .htaccess IP 块与 AuthType Basic 相结合
- python - 如何从 Django 中的第 3 方网站获取我的网站的数据
- javascript - 在反应应用程序上存储资产/内容的最佳方式是什么?
- php - 我的弹出窗口只显示 mySQL 数据库中第一行的信息
- xml - 如何扩展主题样式属性?
- python - python3中的CSV到JSON,具有重复值
- javascript - 无法使用 Vue.js 和 Axios 上传文件
- python - Numpy追加到空数组
- javascript - 切换img src时添加transition
- html - 如何获取 HTML 页面上某个部分的文本