Javascript:将任何数据导入浏览器页面?

时间:2011-03-22 10:37:17

标签: javascript

url hash是将数据提供到浏览器页面的唯一方法吗?

例如,我想保存一些没有服务器端的用户设置,并在另一台PC上从用户那里检索它们。

使用哈希,可以生成一个网址并要求用户在USB闪存上保存网址或快捷方式。

如果还有其他办法吗?

2 个答案:

答案 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(";");
}