2011-06-28 68 views
7

我正在開發一個谷歌應用程序引擎應用程序。我正嘗試將用戶重定向到單擊按鈕時的登錄頁面。爲此,我將window.location.pathname設置爲以下字符串/_ah/login?continue=http%3A//localhost%3A8080/。但是,chrome轉義字符串以使完整的URL變爲http://localhost:8080/_ah/login%3Fcontinue=http%3A//localhost%3A8080/,並且這會產生404錯誤。我怎樣才能防止這種情況發生?工作的URL是http://localhost:8080/_ah/login?continue=http%3A//localhost%3A8080/如何防止在URL中轉義字符的window.location.pathname

+0

這不會有什麼使用App Engine。 –

回答

0

我認爲你最好使用window.location.href。在Chrome和Firefox中window.location.href="/?foofoo"重定向到<domain:port>/?foofoo

7

改爲設置window.location.href

+2

window.location.href是做同樣的事情,是我最初使用的。我認爲它不會逃脫?但它逃脫&。無論我在哪裏,它都變成了&,這打破了我的應用程序。 – morpheus

+0

聽起來像你有不同的問題。如果瀏覽器要在該位置轉義某些內容,它將使用%XX樣式,而不是像&這樣的HTML實體。我的猜測是,您需要在模板引擎中將字符串標記爲安全,以防止它插入HTML實體。要驗證這是問題,請在受影響的頁面上查看源代碼並查看呈現此值的位置。 –

0

,如果你設置的位置和查詢字符串分開,你應該得到更好的結果(至少在鉻)

function redirect_to_login() 
{ 
    window.location.href = "/_ah/login"; 
    window.location.search = "?continue=http%3A//localhost%3A8080/"; 
} 

我沒有在IE遺憾嘗試。它似乎可以在Chrome中進行少量測試。

(第二個想法......如果你把這個在onclick屬性)

<input type="button" 
    onclick="window.location.href = '/_ah/login'; window.location.search = '?continue=http%3A//localhost%3A8080/';" 
    value="Click Me!" 
/> 
+0

這實際上更糟。 window.location.href跟在window.location.search之後,就像window.location.href從未出現過一樣(使用Chrome 12 - 在本地主機上測試)。 – morpheus

+1

@morpheus這不太好。我意識到我測試過的頁面不會顯示出來。我很抱歉。我建議的唯一的另一件事是使用'.assign(「/ _ ah/login /?continue = http%3A // localhost%3A8080 /'否則找出爲什麼window.location.href在分配時無法正常工作在一次打擊。這通常工作(如在@ minitexc的答案) –