六、在浏览器中存储数据

客户端数据存储是对离线应用的自然补充。HTML5 定义了一些用于在浏览器中存储数据的有用的 JavaScript APIs,从简单的名称/值对到使用 JavaScript 对象数据库。在本章中,我将向您展示如何构建依赖持久存储数据的应用,包括如何在离线 web 应用中使用这些数据的细节。

Image 注意浏览器对数据存储的支持喜忧参半。您应该使用 Google Chrome 运行本章中的示例,但 IndexedDB 部分的示例除外,它们只能在 Mozilla Firefox 中运行。

使用本地存储

在浏览器中存储数据最简单的方法是使用 HTML5 本地存储特性。这允许您存储简单的名称/值对,并在以后检索或修改它们。数据会永久存储,但不能保证永远存储。如果需要空间(或者如果数据很长时间没有被访问),浏览器可以自由删除你的数据,当然,用户可以随时清除数据存储,即使你的 web 应用正在运行。其结果是数据是广泛持久的,但不是无限持久的。使用本地存储非常类似于使用常规的 JavaScript 数组,如清单 6-1 所示。

清单 6-1。使用本地存储

<!DOCTYPE html> <html> <head>     <title>Local Storage Example</title>     <link rel="stylesheet" type="text/css" href="jquery-ui-1.8.16.custom.css"/>     <link rel="stylesheet" type="text/css" href="styles.css"/>     <script src="jquery-1.7.1.js" type="text/javascript"></script>         <script src="jquery-ui-1.8.16.custom.js" type="text/javascript"></script>     <script src='knockout-2.0.0.js' type='text/javascript'></script>     <script src='utils.js' type='text/javascript'></script>     <script src='signals.js' type='text/javascript'></script>     <script src='crossroads.js' type='text/javascript'></script> `                    var viewModel = {             items: ["Apple", "Orange", "Banana"],             selectedItem: ko.observable("Apple")         };

$(document).ready(function() {             ko.applyBindings(viewModel);

$('div.catSelectors').buttonset();

hasher.initialized.add(crossroads.parse, crossroads);              hasher.changed.add(crossroads.parse, crossroads);              hasher.init();    

crossroads.addRoute("select/{item}", function(item) {                 viewModel.selectedItem(item);                 localStorage["selection"] = item;             });             viewModel.selectedItem(localStorage["selection"] || viewModel.items[0]);         });       

         
        
            The selected item is: