考虑以下代码:
hashString = window.location.hash.substring(1);
alert('Hash String = '+hashString);
使用以下哈希运行时:
#car=城镇%20%26%20国家
Chrome和Safari中的结果将是:
汽车=城镇%20%26%20国家
但在Firefox(Mac 和 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%20国家