如何在网页中只运行一次JavaScript



所以我正在尝试为我的网页实现一个自动语言转换器。但它在不断运行的同时不断刷新页面。我只想运行这个脚本一次,这样它就不会永远刷新我的页面。

我有这个脚本:

var language = navigator.language || navigator.userLanguage;
language = language.substring( 0, 2 );
if  (language == "pt" || "pt-BR" || "pt-PT"){
window.location.href = "index.html";
}
else {
window.location.href = "indexEN.html";  //
}

其名称:

<!-- Auto Language -->
<script src="js/language.js"></script>

把它想象成一个无限循环,就像while (true) {}一样——你需要做的是在某个点突破循环。要打破这个循环,你需要添加一个检查,以确保你还没有到达预期的页面。这将停止不断的重定向。

var language = navigator.language || navigator.userLanguage
language = language.substring(0, 2)
var ptPage = 'index.html'
var enPage = 'indexEN.html'
// you're calling substring, so no need to check the variants
// your check was also incorrect :)
if (language == "pt") {
if (window.location.pathname !== '/' + ptPage) {
window.location.href = ptPage
}
} else if (window.location.pathname !== '/' + enPage) {
window.location.href = enPage
}

刷新页面是代码的一部分,如您在这里看到的

var language = navigator.language || navigator.userLanguage;// get users default language
language = language.substring( 0, 2 );
if  (language == "pt" || "pt-BR" || "pt-PT"){
window.location.href = "index.html";
}
else {
window.location.href = "indexEN.html";  //loading another html file for users who use english
}

因此,由于您正在重新加载另一个html文件,您的javascript将再次运行。一个解决方案是让你的网页成为SPA(单页应用程序(。这样,您就不必重新加载任何内容(包括javascript(。您还可以在不实际加载新文件的情况下更改页面内容和页眉。SPA通常在react中完成(使用react路由(,但您也可以制作香草JS。https://medium.com/altcampus/implementing-simple-spa-routing-using-vanilla-javascript-53abe399bf3c

不知道这是否是最佳做法,但您可以使用localStorage。

if((localStorage.getItem('pageLoaded') ?? 'true') === 'true') {
alert('dsds')
localStorage.setItem('pageLoaded', 'false')
}

警报将在后执行

最新更新