| OLD | NEW |
| (Empty) |
| 1 <!-- BEGIN AUTHORED CONTENT --> | |
| 2 <p id="classSummary"> | |
| 3 Use the <code>chrome.storage</code> module | |
| 4 to store, retrieve, and track changes to user data. | |
| 5 This API has been optimized | |
| 6 to meet the specific storage needs of extensions. | |
| 7 It provides the same storage capabilities as the | |
| 8 <a href="https://developer.mozilla.org/en/DOM/Storage#localStorage">localStorage
API</a> | |
| 9 with the following key differences: | |
| 10 </p> | |
| 11 <ul> | |
| 12 <li>User data can be automatically synced with Chrome sync | |
| 13 (using <code>storage.sync</code>).</li> | |
| 14 <li>Your extension's content scripts can directly access user data | |
| 15 without the need for a background page.</li> | |
| 16 <li>A user's extension settings can be persisted | |
| 17 even when using | |
| 18 <a href="manifest.html#incognito">split incognito behavior</a>.</li> | |
| 19 <li>User data can be stored as objects | |
| 20 (the <code>localStorage API</code> stores data in strings).</li> | |
| 21 </ul> | |
| 22 <h2 id="manifest">Manifest</h2> | |
| 23 <p>You must declare the "storage" permission in the <a | |
| 24 href="manifest.html">extension manifest</a> | |
| 25 to use the storage API. | |
| 26 For example:</p> | |
| 27 <pre>{ | |
| 28 "name": "My extension", | |
| 29 ... | |
| 30 <b>"permissions": [ | |
| 31 "storage" | |
| 32 ]</b>, | |
| 33 ... | |
| 34 }</pre> | |
| 35 <h2 id="using-sync">Usage</h2> | |
| 36 <p> | |
| 37 To store user data for your extension, | |
| 38 you can use either | |
| 39 <code>storage.sync</code> or | |
| 40 <code>storage.local</code>. | |
| 41 When using <code>storage.sync</code>, | |
| 42 the stored data will automatically be synced | |
| 43 to any Chrome browser that the user is logged into, | |
| 44 provided the user has sync enabled. | |
| 45 </p> | |
| 46 <p> | |
| 47 When Chrome is offline, | |
| 48 Chrome stores the data locally. | |
| 49 The next time the browser is online, | |
| 50 Chrome syncs the data. | |
| 51 Even if a user disables syncing, | |
| 52 <code>storage.sync</code> will still work. | |
| 53 In this case, it will behave identically | |
| 54 to <code>storage.local</code>. | |
| 55 </p> | |
| 56 <p class="warning"> | |
| 57 Confidential user information should not be stored! | |
| 58 The storage area isn't encrypted. | |
| 59 </p> | |
| 60 <h2 id="limits">Storage and throttling limits</h2> | |
| 61 <p><code>chrome.storage</code> is not a big truck. | |
| 62 It's a series of tubes. | |
| 63 And if you don't understand, | |
| 64 those tubes can be filled, | |
| 65 and if they are filled | |
| 66 when you put your message in, | |
| 67 it gets in line, | |
| 68 and it's going to be delayed | |
| 69 by anyone that puts into that tube | |
| 70 enormous amounts of material. | |
| 71 <p>For details on the current limits | |
| 72 of the storage API, and what happens | |
| 73 when those limits are exceeded, please | |
| 74 see the <a href="#apiReference">API reference</a>. | |
| 75 <h2 id="examples">Examples</h2> | |
| 76 <p> | |
| 77 The following example checks for | |
| 78 CSS code saved by a user on a form, | |
| 79 and if found, | |
| 80 stores it. | |
| 81 </p> | |
| 82 <pre> | |
| 83 function saveChanges() { | |
| 84 // Get a value saved in a form. | |
| 85 var theValue = textarea.value; | |
| 86 // Check that there's some code there. | |
| 87 if (!theValue) { | |
| 88 message('Error: No value specified'); | |
| 89 return; | |
| 90 } | |
| 91 // Save it using the Chrome extension storage API. | |
| 92 chrome.storage.sync.set({'value': theValue}, function() { | |
| 93 // Notify that we saved. | |
| 94 message('Settings saved'); | |
| 95 }); | |
| 96 } | |
| 97 </pre> | |
| 98 <p> | |
| 99 If you're interested in tracking changes made | |
| 100 to a data object, | |
| 101 you can add a listener | |
| 102 to its <code>onChanged</code> event. | |
| 103 Whenever anything changes in storage, | |
| 104 that event fires. | |
| 105 Here's sample code | |
| 106 to listen for saved changes: | |
| 107 </p> | |
| 108 <pre> | |
| 109 chrome.storage.onChanged.addListener(function(changes, namespace) { | |
| 110 for (key in changes) { | |
| 111 var storageChange = changes[key]; | |
| 112 console.log('Storage key "%s" in namespace "%s" changed. ' + | |
| 113 'Old value was "%s", new value is "%s".', | |
| 114 key, | |
| 115 namespace, | |
| 116 storageChange.oldValue, | |
| 117 storageChange.newValue); | |
| 118 } | |
| 119 }); | |
| 120 </pre> | |
| 121 <p> | |
| 122 You can find examples that use this API on the | |
| 123 <a href="samples.html#sty">Samples page</a>. | |
| 124 </p> | |
| 125 <!-- END AUTHORED CONTENT --> | |
| OLD | NEW |