如何在不更改 javascript 中的 URL 的情况下重新加载当前页面一次?
Posted
技术标签:
【中文标题】如何在不更改 javascript 中的 URL 的情况下重新加载当前页面一次?【英文标题】:How to reload the current page once without changing the URL in javascript? 【发布时间】:2020-09-18 06:24:06 【问题描述】:当用户访问我的网站时,我正在使用以下 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('needreload');
, false);
但是,这会使我的网站不断地重新加载,而不仅仅是一次。
请告诉我解决这个问题的方法。非常感谢您提供的解决方案!
【问题讨论】:
可能是因为您没有删除needreload cookie或将其设置为false?每次它的现在和每次它得到刷新。想过吗? @Supercool。我已经更新了帖子中的cookie名称,fc_reload
是needreload
,我在发布问题之前没有编辑它。我已经更新了!
【参考方案1】:
我发现了问题,是代码检查用户的语言cookie是否支持有问题。我必须在那里使用&&
而不是||
。如果我使用||
,那么即使支持用户的语言cookie,它也始终是true
,从而导致无限的页面重新加载循环。这是运行良好的代码:
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);
【讨论】:
【参考方案2】:尝试将needreload
cookie 的值设置为"no"
,然后再进行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
【讨论】:
我已经更新了帖子中的cookie名称,fc_reload
是needreload
,我在发布问题之前没有编辑它。
在这种情况下,在 location.reload 之前删除 cookie
我写了如下代码,但是循环的现象还在发生! delCookie('needreload');
location.reload();
在重新加载前尝试将needreload cookie设置为no
我尝试将needreload
cookie 设置为no
,然后是location.reload
,最后是delCookie('needreload')
,但它仍然不断地重新加载页面!以上是关于如何在不更改 javascript 中的 URL 的情况下重新加载当前页面一次?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不更改 Vue 中的 url 的情况下返回 404 错误?
如何允许客户端在不更改应用代码的情况下更改 iOS 应用中的 API 基本 URL?
如何在不更改浏览器中的 URL 的情况下使用 htaccess 进行重定向
Facebook 如何在不重新加载页面或使用 # 或的情况下更改浏览器地址栏中的 URL?