HTML 5中的存储及离线应用(四)
2012-08-22 09:43
316 查看
好吧,目前看起来咱们还是老老实实用Local Storage和Session Storage吧,还是这两看起来靠谱一些。
那么我们在使用Local Storage的时候经常遇到如下的情况:
在一个页面中数据发生了改变,另一个页面不会实时去刷新数据导致两个页面的数据不同步;
这种情况下我们就需要用到存储事件。
接着我们将讲解事件的使用,看代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
template.html by Bill Weinman
<http://bw.org/contact/>
created 2011-04-16
Copyright (c) 2011 The BearHeart Group, LLC
This file may be used for personal educational purposes as needed.
Use for other purposes is granted provided that this notice is
retained and any changes made are clearly indicated as such.
-->
<head>
<title>
localStorage example
</title>
<link rel="stylesheet" type="text/css" href="../CSS/main.css">
<script language="javascript" src="../Javascript/bwH5LS.js"></script>
<script language="javascript">
var t = new bwTable();
var db = getLocalStorage() || dispError('Local Storage not supported.');
var addEL = getAddEventListener();
function getLocalStorage() {
try {
if( !! window.localStorage ) return window.localStorage;
} catch(e) {
return undefined;
}
}
// 确保可以使用window.addEventListener
function getAddEventListener() {
try {
if( !! window.addEventListener ) return window.addEventListener;
} catch(e) {
return undefined;
}
}
// 消息处理
function eventHandler(e) {
eventStatus('Event triggered: ' + e.url + ' ' +
e.storageArea.traveler + ' ' + e.storageArea.destination + ' ' + e.storageArea.transportation);
dispResults();
}
// 添加状态显示区域
function eventStatus(s) {
if(s) element('eventResult').innerHTML = s;
else element('eventResult').innerHTML = 'Event status:';
}
function dispResults() {
if(errorMessage) {
element('results').innerHTML = errorMessage;
return;
}
if(db) {
var t = new bwTable();
t.addRow( ['traveler', db.getItem('traveler')] );
t.addRow( ['destination', db.getItem('destination')] );
t.addRow( ['transportation', db.getItem('transportation')] );
element('results').innerHTML = t.getTableHTML();
}
element('travelForm').elements['traveler'].focus();
element('travelForm').elements['traveler'].select();
}
function dbGo() {
if(errorMessage) return;
var f = element('travelForm');
db.setItem('traveler', f.elements['traveler'].value);
db.setItem('destination', f.elements['destination'].value);
db.setItem('transportation', f.elements['transportation'].value);
eventStatus();
dispResults();
}
function dbClear() {
if(errorMessage) return;
db.clear();
dispResults();
}
function initDisp() {
if(addEL) {
// 添加数据存储消息处理函数
addEL('storage', eventHandler, false);
} else {
element('eventResult').innerHTML = 'This browser does not support event listeners';
}
dispResults();
}
window.onload = function() {
initDisp();
}
</script>
</head>
<body>
<div id="content">
<h1>
localStorage example
</h1>
<div id="form">
<form id="travelForm">
<table class="form">
<tr><td class="label"> Traveler </td><td> <input type="text" name="traveler" /> </td></tr>
<tr><td class="label"> Destination </td><td> <input type="text" name="destination" /> </td></tr>
<tr><td class="label"> Transportation </td><td> <input type="text" name="transportation" /> </td></tr>
<tr><td colspan="2" class="button">
<input id="formSubmit" type="button" value="Clear" onClick="javascript:dbClear()" />
<input id="formSubmit" type="button" value="Go" onClick="javascript:dbGo()" />
</td></tr>
</table>
<input id="inputAction" type="hidden" name="action" value="add" />
<input id="inputKey" type="hidden" name="key" value="0" />
</form>
</div>
<p class="message" id="eventResult">Event status:</p>
<div id="results">
<!-- results show here -->
</div>
</div>
</body>
</html>
那么我们在使用Local Storage的时候经常遇到如下的情况:
在一个页面中数据发生了改变,另一个页面不会实时去刷新数据导致两个页面的数据不同步;
这种情况下我们就需要用到存储事件。
接着我们将讲解事件的使用,看代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
template.html by Bill Weinman
<http://bw.org/contact/>
created 2011-04-16
Copyright (c) 2011 The BearHeart Group, LLC
This file may be used for personal educational purposes as needed.
Use for other purposes is granted provided that this notice is
retained and any changes made are clearly indicated as such.
-->
<head>
<title>
localStorage example
</title>
<link rel="stylesheet" type="text/css" href="../CSS/main.css">
<script language="javascript" src="../Javascript/bwH5LS.js"></script>
<script language="javascript">
var t = new bwTable();
var db = getLocalStorage() || dispError('Local Storage not supported.');
var addEL = getAddEventListener();
function getLocalStorage() {
try {
if( !! window.localStorage ) return window.localStorage;
} catch(e) {
return undefined;
}
}
// 确保可以使用window.addEventListener
function getAddEventListener() {
try {
if( !! window.addEventListener ) return window.addEventListener;
} catch(e) {
return undefined;
}
}
// 消息处理
function eventHandler(e) {
eventStatus('Event triggered: ' + e.url + ' ' +
e.storageArea.traveler + ' ' + e.storageArea.destination + ' ' + e.storageArea.transportation);
dispResults();
}
// 添加状态显示区域
function eventStatus(s) {
if(s) element('eventResult').innerHTML = s;
else element('eventResult').innerHTML = 'Event status:';
}
function dispResults() {
if(errorMessage) {
element('results').innerHTML = errorMessage;
return;
}
if(db) {
var t = new bwTable();
t.addRow( ['traveler', db.getItem('traveler')] );
t.addRow( ['destination', db.getItem('destination')] );
t.addRow( ['transportation', db.getItem('transportation')] );
element('results').innerHTML = t.getTableHTML();
}
element('travelForm').elements['traveler'].focus();
element('travelForm').elements['traveler'].select();
}
function dbGo() {
if(errorMessage) return;
var f = element('travelForm');
db.setItem('traveler', f.elements['traveler'].value);
db.setItem('destination', f.elements['destination'].value);
db.setItem('transportation', f.elements['transportation'].value);
eventStatus();
dispResults();
}
function dbClear() {
if(errorMessage) return;
db.clear();
dispResults();
}
function initDisp() {
if(addEL) {
// 添加数据存储消息处理函数
addEL('storage', eventHandler, false);
} else {
element('eventResult').innerHTML = 'This browser does not support event listeners';
}
dispResults();
}
window.onload = function() {
initDisp();
}
</script>
</head>
<body>
<div id="content">
<h1>
localStorage example
</h1>
<div id="form">
<form id="travelForm">
<table class="form">
<tr><td class="label"> Traveler </td><td> <input type="text" name="traveler" /> </td></tr>
<tr><td class="label"> Destination </td><td> <input type="text" name="destination" /> </td></tr>
<tr><td class="label"> Transportation </td><td> <input type="text" name="transportation" /> </td></tr>
<tr><td colspan="2" class="button">
<input id="formSubmit" type="button" value="Clear" onClick="javascript:dbClear()" />
<input id="formSubmit" type="button" value="Go" onClick="javascript:dbGo()" />
</td></tr>
</table>
<input id="inputAction" type="hidden" name="action" value="add" />
<input id="inputKey" type="hidden" name="key" value="0" />
</form>
</div>
<p class="message" id="eventResult">Event status:</p>
<div id="results">
<!-- results show here -->
</div>
</div>
</body>
</html>
相关文章推荐
- HTML 5中的存储及离线应用(一)
- HTML 5中的存储及离线应用(五)
- HTML 5中的存储及离线应用(二)
- HTML 5中的存储及离线应用(三)
- JavaScript笔记:离线应用与客户端存储
- HTML 5离线存储
- JavaScript之离线应用与客户存储
- html5离线应用存储
- 在Android中使用HTML5本地存储,地理位置,离线应用
- 《javascript高级程序设计》 第23章 离线应用与客户端存储
- HTML5:离线应用与客户端存储
- 离线iOS应用的HTML 5制作指南
- HTML 5 Web 存储 与 应用缓存
- [翻译]通过html5 cache manifest实现将sencha touch应用离线存储!
- 离线应用与客户端存储(待更)
- Web应用中的离线数据存储
- 离线应用和本地存储
- HTML5+的离线本地存储方案
- HTML5中的本地、WebSql、离线应用存储
- JavaScript离线应用与客户端存储