Я использую document.location.hash для сохранения состояния на странице, и я помещаю туда пары кодированных значений URL-адресов, разделенные символами «&». Все идет нормально.
Однако у меня возникла досадная проблема в Firefox - Firefox будет тихо url-декодировать значение хеша при входе, поэтому, когда вы получите его позже, оно будет декодировано.
Я могу исправить проблему, обнаружив, когда я работаю в firefox, и вызывая encodeURIComponent для всего дважды по пути, но, очевидно, это отвратительно, и я действительно не хочу этого делать.
Вот простой пример, где я кодирую "=" как "% 3D", помещаю его в хеш, а когда я получаю его позже, он автоматически возвращается в "=":
// on the way in::
document.location.hash = "foo=" + encodeURIComponent("noisy=input");
//then later.....
// on the way out:
var hash = document.location.hash;
kvPair = hash.split("=");
if (kvPair.length==2) {
console.log("that is correct.")
} else if (kvPair.length==3) {
console.log("oh hai firefox, this is incorrect")
}
Я скрестил пальцы на том, что может быть какой-то скрытый DOM-элемент, который создает firefox, представляет фактическое (не декодированное) хеш-значение?
но суть - кто-нибудь сталкивался с этим и нашел лучшее решение, чем просто обнаружение в браузере и двойной вызов encodeURIComponent в Firefox?
ПРИМЕЧАНИЕ: несколько других вопросов, я думаю, имеют ту же самую основную причину. Наиболее заметно это:
https://stackoverflow.com/questions/4834609/malformed-uri-in-firefox-not-ie-using-encodeuricomponenet-and-setting-hash