2010-04-15 36 views
1

我是新来的Javascript和Web开发,我有一个关于document.location.href的问题。 我使用cookie来存储用户喜欢的语言,然后根据语言加载英语或瑞典语版本。 开始时的默认语言与浏览器的语言相同,我的index.jsp是瑞典语。第一次一切正常。问题是什么时候cookie已经存在。基本代码:问题document.location.href

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存在我们进入第一个“如果”,还有,如果语言是瑞典语它打开默认布拉布拉/ index.jsp页面。当语言设置为engish时,它应该打开blabla/en/index.jsp,但它会打开blabla/en/en/index.jsp,当然这是错误的。

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

回答

4

添加斜线之初,即:

document.location.href = "/en/index.jsp";

目前,你当你想使用绝对路径重定向使用相对路径重定向。开始时的斜线总是意味着绝对的。

如果你曾经使用过一台Unix机器,你会知道/etc/123/abc是一个从根开始的路径,而etc/123/abc/将是一个相对路径,建立在当前目录上。这里也是如此。

0

看来你已经在blabla/en/的页面上了。检查出。

2

如果这是一个商业网站,你关心你的谷歌排名,那么你应该谨慎使用JavaScript重定向。

搜索引擎抓取工具不能遵循这些类型的重定向。最好在服务器端处理它并执行真正的301重定向。

此外,您应该通过单击UI中的按钮来手动更改此方法。

此代码没有任何意义,我:

//Explorer 
if (navigator.userLanguage) 
    language = navigator.userLanguage; 

//other browsers 
else 
    language = (navigator.language) ? navigator.language : navigator.userLanguage; 

看来,以检查是否填充.userLanguage,如果它不是它检查是否填充。外语,如果不是它使用.user语言到此为止已被视为未定义。

我会重构代码是这样的:

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。