Рассмотрим следующий код:
hashString = window.location.hash.substring(1);
alert('Hash String = '+hashString);
При запуске со следующим хешем:
# машина = город% 20% 26% 20Country
результат в Chrome и Safari будет:
машина = город% 20% 26% 20Country
, но в Firefox (Mac AND PC) будет:
машина = Город & Страна
Потому что я использую один и тот же код для разбора параметров запроса и хеша:
function parseParams(paramString) {
var params = {};
var e,
a = /\+/g, // Regex for replacing addition symbol with a space
r = /([^&;=]+)=?([^&;]*)/g,
d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
q = paramString;
while (e = r.exec(q))
params[d(e[1])] = d(e[2]);
return params;
}
Идиосинкразия Firefox здесь ломает его: автомобильный парам становится "Городом", никакой страны.
Существует ли безопасный способ разбора хеш-параметров в браузерах или исправления того, как Firefox их читает?
ПРИМЕЧАНИЕ: Эта проблема ограничена парсингом Firefox параметров HASH. При запуске того же теста со строками запроса:
queryString = window.location.search.substring(1);
alert('Query String = '+queryString);
все браузеры будут показывать:
машина = город% 20% 26% 20Country