我试图使用JavaScript在chrome扩展上显示不同的选项卡,但它不起作用。
在这种情况下,它只重定向到it.example.com
,当我将浏览器语言更改为英语或法语时,该脚本只重定向到it.example.com
。
有人能告诉我如何根据浏览器语言重定向吗?
我想为it
和fr
执行不同的重定向。其他语言应改为英语
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>