html5 web存储
某些技术专家喜欢本机应用程序的原因之一是他们能够在客户端本地存储数据。 HTML5通过允许Web应用程序在浏览器中存储数据而取得了突破。
尽管COOKIE可以用于在浏览器中存储数据,但存在某些缺点-HTML5 Web存储的发明已解决了这些缺点。
COOKIEs的缺点
- Web浏览器中COOKIE的存储限制被限制为大约4KB。
- COOKIE随每个HTTP请求一起发送,从而降低了Web应用程序的性能。
什么是HTML5 Web存储?
它是一个简单的客户端数据库,允许用户以键/值对的形式保留数据。
它具有相当简单的API,可以将数据检索/写入本地存储。 每个域最多可以存储10MB数据。 与COOKIE不同,存储的数据并不包含在每个HTTP请求中。
IE7和更早版本不支持Web存储。 所有其他浏览器(例如Chrome,Opera,Firefox,Safari和IE8 +)均支持Web存储。
Web存储的类型
本地存储:存储没有到期日期的数据。 即使关闭或重新打开浏览器/浏览选项卡,数据也将可用。
会话存储:存储一个会话的数据。 用户关闭浏览器后,持久化的数据将被清除。
在这两种情况下,请注意,不同浏览器之间将无法使用网络存储数据。
例
让我们直接跳入示例以更好地理解HTML5 Web存储。
我们将创建一个简单的用户设置网页,使我们可以更改页面的背景颜色和标题字体大小。
从表单的onsubmit
事件调用的setSettings
函数将允许我们将用户选择的数据保存到本地存储中。
在使用HTML5 Web存储存储数据之前,我们应该检查浏览器是否支持HTML5存储。
我们可以使用默认的API或Modernizr来检查浏览器的兼容性。
function setSettings() {
if ('localStorage' in window && window['localStorage'] !== null) {
//use localStorage object to store data
} else {
alert('Cannot store user preferences as your browser do not support local storage');
}
}
Modernizr是一个Javascript库,可帮助我们检测浏览器对HTML5和CSS功能的支持。 下载最新版本的Modernizr,并将库包含在script元素中。
if (Modernizr.localstorage) {
//use localStorage object to store data
} else {
alert('Cannot store user preferences as your browser do not support local storage');
}
setItem('key','value')
允许我们将数据写入本地存储。
如果存储限制超过5MB,将引发QUOTA_EXCEEDED_ERR
异常。 因此,最好在保存数据的同时向存储代码中添加try / catch块。
function setSettings() {
if ('localStorage' in window && window['localStorage'] !== null) {
try {
var favcolor = document.getElementById('favcolor').value;
var fontwt = document.getElementById('fontwt').value;
localStorage.setItem('bgcolor', favcolor);
localStorage.fontweight = fontwt;
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded!');
}
}
} else {
alert('Cannot store user preferences as your browser do not support local storage');
}
}
我们可以使用浏览器随附的开发人员工具检查数据是否存储在本地存储中。 例如,在Chrome中,右键单击浏览器,然后选择“检查元素”。 选择资源选项卡,然后单击本地存储项。 我们可以看到用户选择的数据以键/值对的形式存储。
可以使用用户设置的背景和字体大小值重新加载网页。 getItem('Key')
帮助检索存储在数据库中的数据。
function applySetting() {
if (localStorage.length != 0) {
document.body.style.backgroundColor = localStorage.getItem('bgcolor');
document.body.style.fontSize = localStorage.fontweight + 'px';
document.getElementById('favcolor').value = localStorage.bgcolor;
document.getElementById('fontwt').value = localStorage.fontweight;
} else {
document.body.style.backgroundColor = '#FFFFFF';
document.body.style.fontSize = '13px'
document.getElementById('favcolor').value = '#FFFFFF';
document.getElementById('fontwt').value = '13';
}
}
length
函数检索存储区域中值的总数。
可以在body标签的onload
事件期间onload
上述函数,如下所示
可以使用clear()
函数或removeItem('key')
函数清除本地存储区域。 在我们的示例中,在清除按钮的click
事件上调用以下函数。
function clearSettings() {
localStorage.removeItem("bgcolor");
localStorage.removeItem("fontweight");
document.body.style.backgroundColor = '#FFFFFF';
document.body.style.fontSize = '13px'
document.getElementById('favcolor').value = '#FFFFFF';
document.getElementById('fontwt').value = '13';
}
储存事件
当我们从Web存储中设置或删除数据时,将在window
对象上触发一个存储事件。 我们可以向事件添加侦听器,并根据需要处理存储更改。
window.addEventListener('storage', storageEventHandler, false);
function storageEventHandler(event) {
applySetting();
}
事件对象具有以下属性
- 关键–已更改的属性
- newValue –新设置的值
- oldValue –以前存储的值
- url –事件起源的完整URL路径
- storageArea – localStorage或sessionStorage对象
请记住,该事件仅在其他窗口上触发(而不在触发事件的窗口上),并且如果数据没有更改,则不会触发该事件。
除应在sessionStorage
对象上执行之外,相同的API方法也适用于会话存储。
结论
因此,现在您可以开始使用Web存储来存储用户首选项,用户信息,会话信息等。您还可以尝试创建可以完全脱机使用的应用,并且脱机期间存储的数据可以作为批处理更新发送回服务器。当用户再次在线时。
翻译自: https://www.sitepoint.com/html5-web-storage/
html5 web存储