JavaScript基于浏览器语言重定向用户(Chrome扩展)



我试图使用JavaScript在chrome扩展上显示不同的选项卡,但它不起作用。

在这种情况下,它只重定向到it.example.com,当我将浏览器语言更改为英语或法语时,该脚本只重定向到it.example.com

有人能告诉我如何根据浏览器语言重定向吗?

我想为itfr执行不同的重定向。其他语言应改为英语

newtab.html

<head>
<title>Loading...</title>
<script type="text/javascript" src="js/newtab.js"></script>
</head>

newtab.js

if (window.navigator.language === 'it') { 
window.location.href = 'https://it.example.com/';
}
if (window.navigator.language === 'fr') { 
window.location.href = 'https://fr.example.com/';
} 
else window.location.href = 'https://example.com/';

(function redirectToSpecificPage() {
var base = 'https://$1example.com/',
replaceLng = function(toReplace, replaceWith) {
return base.replace(toReplace, replaceWith);
},
lngPages = {
en: replaceLng(''),
it: replaceLng('it.'),
fr: replaceLng('fr.'),
es: replaceLng('es.'),
}
window.location.href = lngPages[window.navigator.language.toLowerCase().slice(0,2)] || lngPages.base;
})();

假设您像评论中建议的那样,将所有!=更改为===。。。

我用意大利语更改了浏览器语言,该语言仍将我重定向到example.com

看起来您的任何条件都未评估为true

请注意,语言识别码通常包括国家/地区"变体"。。。例如,我的浏览器语言实际上是en-US,而不仅仅是en。这是一份看起来很完整的清单,你应该看看。

另外,我建议您在这种特殊情况下使用switch语句,而不是if/else。

var language = window.navigator.language;
var languageFistTwo = language.substr(0,1); // To only keep the first 2 characters.
switch (languageFistTwo) { 
case "en":
window.location.href = 'https://example.com/';
break;
case "it":
window.location.href = 'https://it.example.com/';
break;
case "fr":
window.location.href = 'https://fr.example.com/';
break;
case "es":
window.location.href = 'https://es.example.com/';
break;
default:
window.location.href = 'https://example.com/';
} 

我找到了解决方案。但这只适用于chrome扩展,不适用于firefox:/

_locales/en/messages.json

"example_default_search": {
"message": "example.com",
"description": ""
}

_locales/it/messages.json

"example_default_search": {
"message": "it.example.com",
"description": ""
}

newtab.js

function localizeHtmlPage()
{
//Localize by replacing __MSG_***__ meta tags
var objects = document.getElementsByTagName('html');
for (var j = 0; j < objects.length; j++)
{
var obj = objects[j];
var valStrH = obj.innerHTML.toString();
var valNewH = valStrH.replace(/__MSG_(w+)__/g, function(match, v1)
{
return v1 ? chrome.i18n.getMessage(v1) : "";
});
if(valNewH != valStrH)
{
obj.innerHTML = valNewH;
}
}
}
localizeHtmlPage();

newtab.html

<head>
<title>Loading...</title>
<meta http-equiv="refresh" content="0;URL='https://__MSG_example_default_search__/'" />
<script type="text/javascript" src="js/newtab.js"></script>
</head>

相关内容

  • 没有找到相关文章

最新更新