2010-04-15 41 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。

相關問題