2011-03-11 69 views
0

我有一個應用程序在#號後面接收網址,並用歷史記錄ValueChangeHandler對它們做出響應。嚴重問題:網址在不同的瀏覽器上以不同的方式轉義。在歷史更改處理程序中返回的字符串處理差異

例如,當我去#riley%2Blark%40gmail.com時,Chrome發送我的ValueChangeHandler riley%2Blark%40gmail.com,而FireFox發送[email protected]。如果我想在它們上運行URL.decodeQueryString,這是一個非常糟糕的區別,因爲我最終會在Firefox中留出額外的空間。

我該如何處理這個問題,而不是爲不同的瀏覽器編寫單獨的實現?

回答

1

我能想到的兩種可能的解決方案:

  1. ü可以嘗試添加另一個參數 令牌,使得令牌的 爲 #riley%2Blark%40gmail.com/%2B-a-space 上接收令牌,檢查 第二令牌的一部分。如果 第二部分包含%2B,則urldecode令牌。否則用 代替'+'

  2. 您也可以嘗試通過JSNI使用Location.hash 。我認爲結果 應該是統一的。

+0

偉大的想法。不幸的是#2失敗 - 它返回不同的字符串。我猜,Firefox只是決定預先對網址進行解碼。 – 2011-03-11 14:35:55

+1

http://code.google.com/p/google-web-toolkit/issues/detail?id=6128 – 2011-03-14 18:05:11