2011-03-11 72 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