我是Javascript和Web开发的新手,我对document.location.href有疑问。 我使用cookie来存储用户喜欢的语言,然后根据语言加载英语或瑞典语版本。 开头的默认语言与浏览器的语言相同,我的index.jsp是瑞典语。一切顺利的第一次。问题是cookie已经存在。基本代码是:
if (language!=null && language!=""){
if (language=="en-US" || language=="en-us")
document.location.href = "en/index.jsp";
}
else{
//Explorer
if (navigator.userLanguage)
language = navigator.userLanguage;
//other browsers
else
language = (navigator.language) ? navigator.language : navigator.userLanguage;
if (language!=null && language!=""){
setCookie('language', language, 365, '/', 'onCheck');
if (language=="en-US" || language=="en-us")
document.location.href = "en/index.jsp";
else if(language=="sv")
document.location.href="index.jsp";
}
}
当cookie存在时,我们输入第一个“if”,如果语言是瑞典语,则打开默认的blabla / index.jsp页面。当语言被设置为engish时,它应该打开blabla / en / index.jsp,但它会打开blabla / en / en / index.jsp,这当然是错误的。
有谁知道我做错了什么? 感谢
答案 0 :(得分:4)
在开头添加斜杠,即:
document.location.href = "/en/index.jsp";
目前,如果要使用绝对路径进行重定向,则使用相对路径进行重定向。一开始的斜线总是绝对的。
如果你曾经使用过Unix机器,你就会知道/etc/123/abc
是一条从根开始的路径,而etc/123/abc/
是一条相对路径,建立在当前目录之上。这里也是如此。
答案 1 :(得分:2)
如果这是一个商业网站并且您关心自己的Google排名,那么您应该谨慎使用JavaScript重定向。
搜索引擎抓取工具无法遵循这些重定向。最好在服务器端处理它并执行真正的301重定向。
此外,您应该通过点击用户界面中的按钮手动更改此功能。
这段代码对我没有任何意义:
//Explorer
if (navigator.userLanguage)
language = navigator.userLanguage;
//other browsers
else
language = (navigator.language) ? navigator.language : navigator.userLanguage;
似乎检查是否填充了.userLanguage,如果它不是,它检查是否填充.language,如果不是,则使用.userLanguage,此时已被视为未定义。
我会重构这样的代码:
if (IsCookieSet()) {
if (IsCookieLanguage("en-US")) {
document.location.href = "en/index.jsp";
}
}
else {
language = navigator.userLanguage ? navigator.userLanguage : navigator.language;
if (!IsCookieSet()){
setCookie('language', language, 365, '/', 'onCheck');
if (IsCookieLanguage("en-US")) {
document.location.href = "en/index.jsp";
}
else if(IsCookieLanguage("sv"))
{
document.location.href="index.jsp";
}
}
}
function IsCookieSet()
{
return language!=null && language!="";
}
function IsCookieLanguage(lang)
{
return language.toLowerCase() == lang.toLowerCase();
}
嗯,代码有点干净,但它仍然没有多大意义,因为你没有包含所有代码 - 即检索cookie的位。
答案 2 :(得分:0)
看来你已经在blabla/en/
的页面上了。检查一下。