document.location.href的问题

时间:2010-04-15 08:55:47

标签: javascript cookies document

我是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,这当然是错误的。

有谁知道我做错了什么? 感谢

3 个答案:

答案 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/的页面上了。检查一下。