url hash是将数据提供到浏览器页面的唯一方法吗?
例如,我想保存一些没有服务器端的用户设置,并在另一台PC上从用户那里检索它们。
使用哈希,可以生成一个网址并要求用户在USB闪存上保存网址或快捷方式。
如果还有其他办法吗?
答案 0 :(得分:0)
你这么说: 使用哈希,可以生成一个网址。因此,url必须是唯一的,以便为浏览器页面提供数据。客户端真的没有其他方式。
答案 1 :(得分:0)
由于您的URL是使资源唯一的唯一方法(或:保存设置),因此您可以使用它来存储数据。请注意,只有散列部分不会发送到服务器。
网址location
的 http://www.iana.org/domains/example/page?data=xyz#hash
属性:
{
"hash": "#hash",
"host": "www.iana.org",
"hostname": "www.iana.org",
"href": "http://www.iana.org/domains/example/page?data=xyz#hash",
"pathname": "/domains/example/page",
"port": "",
"protocol": "http:",
"search": "?data=xyz"
}
不建议以这种方式传输敏感数据(密码,个人信息)。即使它在服务器上不可见,也会在浏览器历史记录中显示。
您可以使用encodeURIComponent
功能转义#
或&
等特殊字符。
像#field:data;field2:data2
这样的哈希URL示例(也可以使用其他分隔符):
// default settings
var settings = {
"lang": "en",
"style": "green"
};
// this should be called before the settings are used
function loadSettings() {
// get the part after # and split it by `;`
var hashSettingsArray = location.hash.substr(1).split(";");
for (var i=0; i<hashSettingsArray.length; i++) {
var hashSettingArray = hashSettingsArray[i].split(':');
var key = decodeURIComponent(hashSettingArray[0]);
// if the key exists in the settings object, accept it
if (key in settings) {
// accept #field without value, defaulting to an empty string
var value = hashSettingsArray.length > 1 ? decodeURIComponent(hashSettingArray[1]) : "";
settings[key] = value;
}
}
}
function getSettingsHash() {
var settingsArray = [];
for (var setting in settings) {
var key = encodeURIComponent(setting);
var value = encodeURIComponent(settings[setting]);
settingsArray.push(key + ":" + value);
}
// example return value: #lang:en;style:green
return "#" + settingsArray.join(";");
}