調試IndexedDB應用程序
IndexedDB 是一種W3C 工作草案,令 JavaScript 開發人員可以存儲、搜索并檢索用戶本地客戶端上的數據,即便未啟用 Internet 連接的情況下也可以。本博文介紹 IDBExplorer,我們在內部利用該工具調試 IndexedDB 應用程序。利用 IDBExplorer,您可以查看數據庫架構、對象存儲內容和索引詳細信息。
通過一個 IndexedDB 應用程序示例了解該工具
為了更好地演示說明,我使用 IndexedDB 創建了一個應用程序,用于跟蹤我的新年計劃。它在本地存儲并訪問我的計劃(在系統上瀏覽網頁),并允許我添加或編輯計劃。[Done That](完成)按鈕會將選定的計劃從列表中移除,并從數據庫中移除其內部表現形式。

IndexedDB 將某個數據庫定義為信息的容器。每個數據庫均包含對象存儲,用作 JavaScript 對象的存儲庫。每個對象均包含可以利用 API 進行查詢的特性。如果您對關系數據庫熟悉,對象存儲可以等同于表,對象存儲中的每個 JavaScript 對象表示一個記錄。不過,IndexedDB 對象存儲中存儲的對象都被視為不透明實體。另外,這些對象都無需包含相同的屬性。
如果JavaScript 對象與關系數據庫記錄相似,則該對象的屬性可以被認為是表中的列(或字段)。結果,IndexedDB 允許您定義標識對象屬性的索引,用于在對象存儲中搜索記錄。因此,索引允許您使用 JavaScript 對象的特性值遍歷并搜索 IndexedDB 數據。
IndexedDB 允許每個域具有多個數據庫。此示例使用一個數據庫:“NewYear”。該應用程序在 NewYear 數據庫中名為“Resolutions”的對象存儲中存儲我的計劃。每個計劃都是具有以下特性的 JavaScript 對象:
◆ priorityId:將計劃分成不同的優先級
◆ name:計劃的名稱
◆ occurrenceId:跟蹤計劃的活動的執行頻率
◆ dueDate:計劃的完成日期
◆ createdDate:計劃添加到對象存儲的內部日期
◆ categoryId:定義計劃的活動類型
請注意,并不是所有特性在應用程序的 UI 中都是可見的。在某些情況下,他們僅供內部使用(如 createdDate)。
下面是 IDBExplorer 工具顯示“Resolutions”對象存儲的內容的方式:

“Resolutions”對象存儲還包含名為“priorityId”的 priorityId 特性的索引,利用該索引應用程序可以使用priorityId 屬性查詢對象。每個 priorityId 值的描述位于“Priorities”對象存儲內,occurrenceId 值的描述位于“Occurrences”對象存儲內。類似地,categoryId 值的描述位于“Categories”對象存儲內。
該工具使用一個樹層次結構來說明上述關系:

IDBExplorer 工具顯示數據庫中有五個計劃(兩個高優先級任務,兩個中優先級任務和一個低優先級任務)。
利用該應用程序,我可以添加一個新計劃:
該應用程序利用光標從 Occurrence、Priority 和 Category 字段的各自對象存儲中檢索這些字段的值,并將這些值顯示給用戶。IDBExplorer 工具允許您查看這些值在對象存儲中存在的方式。例如,選擇 Categories 對象存儲會顯示可用的類別及其描述:

您可以在“WorkOn”屏幕中選擇某個計劃,并選擇 [Edit](編輯),對該計劃進行更新。進行任意更改后,選擇 [Update](更新)按鈕將提交這些更改,并在“Resolutions”對象存儲中更新這些值。
在您的應用程序中使用 IDBExplorer
您可以在您的 Metro 風格應用程序或網站中包括 IDBExplorer 工具。不過,我們建議您不要在您的應用程序中部署該工具。
要將該工具添加到您的網站,請將 IDBExplorer 軟件包的內容復制并解壓到您的網站。您的應用程序需要利用 iframe 元素或一個新窗口鏈接到 IDBExplorer 文件夾內包含的 IDBExplorer.html 文件。
在我們的示例中,我們決定在 iframe 元素內承載 IDBExplorer。.不過,對于常規開發,我們建議在一個新窗口內承載此 URI。當您調試數據庫和應用程序時,不會影響您網站的用戶界面,實現了并行的用戶體驗。
當承載 IDBExplorer 時,您需要使用查詢字符串傳遞數據庫名稱。在此示例中,是通過利用 iframe 元素的 src 特性來實現的:
- <iframe id="debuggerId" class="debuggerContainer" src="IDBExplorer/IDBExplorer.html?name=NewYear"></iframe>
當計劃在 Metro 風格應用程序中承載此功能時,請切記 Metro 風格程序是全屏幕運行的。因此,您應該導航到此 URL,而不是打開一個新窗口(您將需要向 IDBExplorer.html 文件中添加一個 [Back](返回)按鈕,以便能夠返回您的應用程序)。另外,您可以添加一個 iframe 元素并在該元素中顯示該工具。
原文:http://blogs.msdn.com/b/ie_cn/archive/2012/02/01/indexeddb.aspx
【編輯推薦】