Javascript:是否将任何数据导入浏览器页面?
url散列是向浏览器页面提供数据的唯一方法吗 例如,我想保存一些不带服务器端的用户设置,并从另一台pc上的用户检索它们 使用散列可以生成url并要求用户将url或快捷方式保存在USB闪存上 如果还有其他方法吗?你说:Javascript:是否将任何数据导入浏览器页面?,javascript,Javascript,url散列是向浏览器页面提供数据的唯一方法吗 例如,我想保存一些不带服务器端的用户设置,并从另一台pc上的用户检索它们 使用散列可以生成url并要求用户将url或快捷方式保存在USB闪存上 如果还有其他方法吗?你说: 使用散列可以生成url。因此,url在向浏览器页面提供数据的方式上必须是唯一的。客户端确实没有其他方法。由于URL是使资源唯一的方法(或:保存设置),因此您可以使用它存储数据的任何内容。请注意,只有散列部分不会发送到服务器 位置URL的属性http://www.iana.org/d
使用散列可以生成url。因此,url在向浏览器页面提供数据的方式上必须是唯一的。客户端确实没有其他方法。由于URL是使资源唯一的方法(或:保存设置),因此您可以使用它存储数据的任何内容。请注意,只有散列部分不会发送到服务器
位置
URL的属性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
函数转义特殊字符,如#
或&
哈希URL示例,如#字段:数据;字段2:data2
(也可以使用其他分隔符):
//默认设置
变量设置={
“郎”:“恩”,
“风格”:“绿色”
};
//应在使用设置之前调用此选项
函数loadSettings(){
//把零件放在#后面,并用`分开`
var hashSettingsArray=location.hash.substr(1).split(“;”);
对于(VARI=0;I1?decodeURIComponent(hashSettingArray[1]):“”;
设置[键]=值;
}
}
}
函数getSettingsHash(){
var settingsArray=[];
用于(设置中的var设置){
var key=encodeURIComponent(设置);
var值=组件(设置[设置]);
设置ray.push(键+”:“+值);
}
//示例返回值:#lang:en;样式:绿色
返回“#”+setingsarray.join(“;”);
}
也许你应该解释你为什么要做这样的事情。这毫无意义:\n如果你想要浏览器的可移植性,设置应该保存在服务器中。我想避免用户注册。好吧,有一个查询字符串?user=foo&hobby=bar
…否则你需要服务器端用户注册(可移植)或cookies(不可移植)使用openid..登录twitter、facebook和google,几乎可以肯定用户将拥有其中的一个!可以使用哈希保存链接。稍后用户只需跟随该链接,javascript就会从中读取哈希。顺便问一下,一个哈希中可以存储多少数据?是否可以在url中以某种方式打开哈希链?因此它们可以连接并存储在localStorage或cookie中。有关URL的最大长度,请参阅上的答案。使用多个URL不是一个好主意,为什么不创建一个包含所有存储设置的文本字段,以便用户可以复制它?是的,但用户应该打开记事本,将它们复制到记事本,然后将它们保存到USB设备中。But使用url快捷方式更简单。只需将url拖动到usb文件夹,然后在另一台电脑上双击它即可。是不是更简单?为什么不制作一个HTML表单,用户可以将其保存在记事本中?然后用户只需打开saved.html
文件,浏览器就会导入数据。那么有没有办法在同一个选项卡中创建一个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(";");
}