ब्यौरा
उपयोगकर्ता के डेटा को सेव करने, वापस पाने, और उसमें हुए बदलावों को ट्रैक करने के लिए, chrome.storage एपीआई का इस्तेमाल करें.
अनुमतियां
storageखास जानकारी
Storage API, एक्सटेंशन के हिसाब से उपयोगकर्ता के डेटा और उसकी स्थिति को बनाए रखने का तरीका उपलब्ध कराता है. यह वेब प्लैटफ़ॉर्म के स्टोरेज एपीआई (IndexedDB और Storage) की तरह ही है. हालांकि, इसे एक्सटेंशन की स्टोरेज से जुड़ी ज़रूरतों को पूरा करने के लिए डिज़ाइन किया गया है. यहां कुछ मुख्य सुविधाओं के बारे में बताया गया है:
- एक्सटेंशन के सभी कॉन्टेक्स्ट, जैसे कि एक्सटेंशन सर्विस वर्कर और कॉन्टेंट स्क्रिप्ट के पास Storage API का ऐक्सेस होता है.
- JSON में सेव किए जा सकने वाले वैल्यू को ऑब्जेक्ट प्रॉपर्टी के तौर पर सेव किया जाता है.
- Storage API, एक एसिंक्रोनस एपीआई है. यह एक साथ कई फ़ाइलें पढ़ने और लिखने की सुविधा देता है.
- अगर उपयोगकर्ता कैश मेमोरी और ब्राउज़िंग इतिहास को मिटा देता है, तब भी यह डेटा बना रहता है.
- सेव की गई सेटिंग, स्प्लिट गुप्त मोड का इस्तेमाल करते समय भी बनी रहती हैं.
- इसमें एंटरप्राइज़ की नीतियों के लिए, मैनेज किया गया स्टोरेज एरिया शामिल होता है. इसमें सिर्फ़ पढ़ने का ऐक्सेस होता है.
एक्सटेंशन, कुछ कॉन्टेक्स्ट (पॉप-अप और अन्य एचटीएमएल पेज) में [Storage][mdn-storage] इंटरफ़ेस (window.localStorage से ऐक्सेस किया जा सकता है) का इस्तेमाल कर सकते हैं. हालांकि, ऐसा करने का सुझाव नहीं दिया जाता. इसकी ये वजहें हैं:
- एक्सटेंशन का सर्विस वर्कर, Storageको ऐक्सेस नहीं कर सकता.
- कॉन्टेंट स्क्रिप्ट, होस्ट पेज के साथ स्टोरेज शेयर करती हैं.
- Storageइंटरफ़ेस का इस्तेमाल करके सेव किया गया डेटा, उपयोगकर्ता के ब्राउज़िंग इतिहास को मिटाने पर मिट जाता है.
किसी सर्विस वर्कर से, वेब स्टोरेज एपीआई से एक्सटेंशन स्टोरेज एपीआई में डेटा ट्रांसफ़र करने के लिए:
- कन्वर्ज़न रूटीन और [onMessage][on-message] हैंडलर की मदद से, स्क्रीन से बाहर का दस्तावेज़ बनाएं.
- स्क्रीन पर मौजूद नहीं है, ऐसे किसी दस्तावेज़ में कन्वर्ज़न रूटीन जोड़ें.
- एक्सटेंशन के सर्विस वर्कर में, अपने डेटा के लिए chrome.storageकी जांच करें.
- अगर आपका डेटा नहीं मिलता है, तो [create][create-offscreen] एक ऑफ़स्क्रीन दस्तावेज़ बनाएं और कन्वर्ज़न रूटीन शुरू करने के लिए [sendMessage()][send-message] को कॉल करें.
- स्क्रीन से बाहर मौजूद दस्तावेज़ के onMessageहैंडलर में, कन्वर्ज़न रूटीन को कॉल करें.
एक्सटेंशन में वेब स्टोरेज एपीआई के काम करने के तरीके में भी कुछ बारीकियां होती हैं. ज़्यादा जानने के लिए, [स्टोरेज और कुकी][storage-and-cookies] लेख पढ़ें.
स्टोरेज एरिया
Storage API को इन चार बकेट ("स्टोरेज एरिया") में बांटा गया है:
- storage.local
- डेटा को स्थानीय तौर पर सेव किया जाता है. एक्सटेंशन हटाने पर, यह डेटा मिट जाता है. कोटा की सीमा करीब 10 एमबी है. हालांकि, "unlimitedStorage"की अनुमति का अनुरोध करके इसे बढ़ाया जा सकता है. ज़्यादा डेटा सेव करने के लिए, इसका इस्तेमाल करें.
- storage.sync
- सिंक करने की सुविधा चालू होने पर, डेटा को उस Chrome ब्राउज़र पर सिंक किया जाता है जिसमें उपयोगकर्ता ने लॉग इन किया है. अगर यह सुविधा बंद है, तो यह storage.localकी तरह काम करती है. जब ब्राउज़र ऑफ़लाइन होता है, तब Chrome डेटा को स्थानीय तौर पर सेव करता है. इसके बाद, जब ब्राउज़र ऑनलाइन होता है, तब Chrome डेटा को सिंक करना फिर से शुरू कर देता है. कोटा की सीमा करीब 100 केबी है. हर आइटम के लिए 8 केबी. इसका इस्तेमाल, सिंक किए गए ब्राउज़र में उपयोगकर्ता की सेटिंग को बनाए रखने के लिए किया जा सकता है.
- storage.session
- यह कुकी, ब्राउज़र सेशन के दौरान डेटा को मेमोरी में सेव करती है. डिफ़ॉल्ट रूप से, यह कॉन्टेंट स्क्रिप्ट के लिए उपलब्ध नहीं होता. हालांकि, chrome.storage.session.setAccessLevel()सेट करके इस सेटिंग को बदला जा सकता है. कोटा की सीमा करीब 10 एमबी है. इसका इस्तेमाल, सर्विस वर्कर के सभी रन में ग्लोबल वैरिएबल सेव करने के लिए किया जा सकता है.
- storage.managed
- एडमिन, मैनेज किए जा रहे एनवायरमेंट में काम करने वाले एक्सटेंशन की सेटिंग को कॉन्फ़िगर करने के लिए, स्कीमा और एंटरप्राइज़ नीतियों का इस्तेमाल कर सकते हैं. इस स्टोरेज एरिया में मौजूद डेटा को सिर्फ़ पढ़ा जा सकता है.
मेनिफ़ेस्ट
स्टोरेज एपीआई का इस्तेमाल करने के लिए, एक्सटेंशन के मेनिफ़ेस्ट में "storage" अनुमति का एलान करें. उदाहरण के लिए:
{
  "name": "My extension",
  ...
  "permissions": [
    "storage"
  ],
  ...
}
इस्तेमाल
यहां दिए गए उदाहरणों में, local, sync, और session स्टोरेज एरिया के बारे में बताया गया है:
storage.local
chrome.storage.local.set({ key: value }).then(() => {
  console.log("Value is set");
});
chrome.storage.local.get(["key"]).then((result) => {
  console.log("Value currently is " + result.key);
});
storage.sync
chrome.storage.sync.set({ key: value }).then(() => {
  console.log("Value is set");
});
chrome.storage.sync.get(["key"]).then((result) => {
  console.log("Value currently is " + result.key);
});
storage.session
chrome.storage.session.set({ key: value }).then(() => {
  console.log("Value was set");
});
chrome.storage.session.get(["key"]).then((result) => {
  console.log("Value currently is " + result.key);
});
managed स्टोरेज एरिया के बारे में ज़्यादा जानने के लिए, स्टोरेज एरिया के लिए मेनिफ़ेस्ट देखें.
स्टोरेज और थ्रॉटलिंग की सीमाएं
Storage API में डेटा जोड़ने को, किसी बड़े ट्रक में सामान रखने जैसा न समझें. स्टोरेज में डेटा जोड़ने को पाइप में कुछ डालने जैसा समझें. पाइप में पहले से ही कोई चीज़ मौजूद हो सकती है और हो सकता है कि वह पूरी तरह से भरी हुई हो. स्टोरेज में डेटा जोड़ने और उसके रिकॉर्ड होने के बीच हमेशा कुछ समय लगता है.
स्टोरेज के इस्तेमाल की तय सीमा और इसे पार करने पर क्या होता है, इस बारे में जानने के लिए sync, local, और session के लिए तय सीमा की जानकारी देखें.
उपयोग के उदाहरण
यहां दिए गए सेक्शन में, Storage API के इस्तेमाल के सामान्य उदाहरण दिए गए हैं.
स्टोरेज के अपडेट का तुरंत जवाब
स्टोरेज में किए गए बदलावों को ट्रैक करने के लिए, इसके onChanged इवेंट में एक लिसनर जोड़ा जा सकता है. स्टोरेज में कोई भी बदलाव होने पर, यह इवेंट ट्रिगर होता है. सैंपल कोड इन बदलावों को ट्रैक करता है:
background.js:
chrome.storage.onChanged.addListener((changes, namespace) => {
  for (let [key, { oldValue, newValue }] of Object.entries(changes)) {
    console.log(
      `Storage key "${key}" in namespace "${namespace}" changed.`,
      `Old value was "${oldValue}", new value is "${newValue}".`
    );
  }
});
हम इस आइडिया को और बेहतर बना सकते हैं. इस उदाहरण में, हमारे पास एक विकल्प पेज है. इसकी मदद से उपयोगकर्ता, "डीबग मोड" को टॉगल कर सकता है. हालांकि, यहां इसे लागू करने का तरीका नहीं दिखाया गया है.  विकल्पों वाला पेज, नई सेटिंग को तुरंत storage.sync में सेव कर देता है. साथ ही, सर्विस वर्कर storage.onChanged का इस्तेमाल करके, सेटिंग को जल्द से जल्द लागू कर देता है.
options.html:
<!-- type="module" allows you to use top level await -->
<script defer src="options.js" type="module"></script>
<form id="optionsForm">
  <label for="debug">
    <input type="checkbox" name="debug" id="debug">
    Enable debug mode
  </label>
</form>
options.js:
// In-page cache of the user's options
const options = {};
const optionsForm = document.getElementById("optionsForm");
// Immediately persist options changes
optionsForm.debug.addEventListener("change", (event) => {
  options.debug = event.target.checked;
  chrome.storage.sync.set({ options });
});
// Initialize the form with the user's option settings
const data = await chrome.storage.sync.get("options");
Object.assign(options, data.options);
optionsForm.debug.checked = Boolean(options.debug);
background.js:
function setDebugMode() { /* ... */ }
// Watch for changes to the user's options & apply them
chrome.storage.onChanged.addListener((changes, area) => {
  if (area === 'sync' && changes.options?.newValue) {
    const debugMode = Boolean(changes.options.newValue.debug);
    console.log('enable debug mode?', debugMode);
    setDebugMode(debugMode);
  }
});
स्टोरेज से एसिंक्रोनस प्रीलोड
सर्विस वर्कर हमेशा चालू नहीं रहते हैं. इसलिए, मेनिफ़ेस्ट V3 एक्सटेंशन को कभी-कभी इवेंट हैंडलर को लागू करने से पहले, स्टोरेज से डेटा को एसिंक्रोनस तरीके से लोड करना पड़ता है. इसके लिए, यहां दिए गए स्निपेट में एसिंक action.onClicked इवेंट हैंडलर का इस्तेमाल किया गया है. यह action.onClicked ग्लोबल के पॉप्युलेट होने का इंतज़ार करता है, ताकि इसके बाद लॉजिक को लागू किया जा सके.storageCache
background.js:
// Where we will expose all the data we retrieve from storage.sync.
const storageCache = { count: 0 };
// Asynchronously retrieve data from storage.sync, then cache it.
const initStorageCache = chrome.storage.sync.get().then((items) => {
  // Copy the data retrieved from storage into storageCache.
  Object.assign(storageCache, items);
});
chrome.action.onClicked.addListener(async (tab) => {
  try {
    await initStorageCache;
  } catch (e) {
    // Handle error that occurred during storage initialization.
  }
  // Normal action handler logic.
  storageCache.count++;
  storageCache.lastTabId = tab.id;
  chrome.storage.sync.set(storageCache);
});
एक्सटेंशन के उदाहरण
Storage API के अन्य डेमो देखने के लिए, इनमें से कोई उदाहरण देखें:
टाइप
AccessLevel
स्टोरेज एरिया का ऐक्सेस लेवल.
Enum
"TRUSTED_CONTEXTS" 
 यह एक्सटेंशन से जनरेट हुए कॉन्टेक्स्ट के बारे में बताता है.
"TRUSTED_AND_UNTRUSTED_CONTEXTS" 
 इससे एक्सटेंशन के बाहर से आने वाले कॉन्टेक्स्ट के बारे में पता चलता है.
StorageArea
प्रॉपर्टी
- 
    onChangedEvent<functionvoidvoid> Chrome 73 और इसके बाद के वर्शनजब एक या उससे ज़्यादा आइटम में बदलाव होता है, तब यह इवेंट ट्रिगर होता है. onChanged.addListenerफ़ंक्शन इस तरह दिखता है:(callback: function) => {...} - 
    कॉलबैकफ़ंक्शन callbackपैरामीटर ऐसा दिखता है:(changes: object) => void - 
    बदलावऑब्जेक्ट 
 
- 
    
 
- 
    
- 
    मिटाएंअमान्य प्रॉमिसस्टोरेज से सभी आइटम हटा देता है. clearफ़ंक्शन इस तरह दिखता है:(callback?: function) => {...} - 
    कॉलबैकफ़ंक्शन ज़रूरी नहीं callbackपैरामीटर ऐसा दिखता है:() => void 
 - 
            returnsPromise<void> Chrome 95+प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा. 
 
- 
    
- 
    सदस्यता लेंअमान्य प्रॉमिसस्टोरेज से एक या उससे ज़्यादा आइटम पाता है. getफ़ंक्शन इस तरह दिखता है:(keys?: string | string[] | object, callback?: function) => {...} - 
    बटनstring | string[] | object ज़रूरी नहीं डिफ़ॉल्ट वैल्यू तय करने वाली डिक्शनरी (ऑब्जेक्ट का ब्यौरा देखें), पाने के लिए एक कुंजी या पाने के लिए कुंजियों की सूची. खाली सूची या ऑब्जेक्ट से, खाली नतीजा ऑब्जेक्ट मिलेगा. स्टोरेज का पूरा कॉन्टेंट पाने के लिए, nullपास करें.
- 
    कॉलबैकफ़ंक्शन ज़रूरी नहीं callbackपैरामीटर ऐसा दिखता है:(items: object) => void - 
    आइटमऑब्जेक्ट ऑब्जेक्ट, जिसमें आइटम को उनकी कुंजी-वैल्यू मैपिंग में रखा गया है. 
 
- 
    
 - 
            returnsPromise<object> Chrome 95+प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा. 
 
- 
    
- 
    getBytesInUseअमान्य प्रॉमिसइस फ़ंक्शन से, एक या उससे ज़्यादा आइटम के लिए इस्तेमाल की जा रही जगह (बाइट में) का पता चलता है. getBytesInUseफ़ंक्शन इस तरह दिखता है:(keys?: string | string[], callback?: function) => {...} - 
    बटनstring | string[] ज़रूरी नहीं कुल इस्तेमाल की जानकारी पाने के लिए, एक कुंजी या कुंजियों की सूची. खाली सूची के लिए, यह फ़ंक्शन 0 दिखाता है. सभी स्टोरेज के कुल इस्तेमाल की जानकारी पाने के लिए, nullपास करें.
- 
    कॉलबैकफ़ंक्शन ज़रूरी नहीं callbackपैरामीटर ऐसा दिखता है:(bytesInUse: number) => void - 
    bytesInUseसंख्या स्टोरेज में इस्तेमाल की जा रही जगह, बाइट में. 
 
- 
    
 - 
            returnsPromise<number> Chrome 95+प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा. 
 
- 
    
- 
    getKeysअमान्य Promise Chrome 130 या इसके बाद के वर्शनयह स्टोरेज से सभी कुंजियां वापस लाता है. getKeysफ़ंक्शन इस तरह दिखता है:(callback?: function) => {...} - 
    कॉलबैकफ़ंक्शन ज़रूरी नहीं callbackपैरामीटर ऐसा दिखता है:(keys: string[]) => void - 
    बटनstring[] स्टोरेज से पढ़ी गई कुंजियों वाला ऐरे. 
 
- 
    
 - 
            returnsPromise<string[]> प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा. 
 
- 
    
- 
    कॉन्टेंट हटानाअमान्य प्रॉमिसस्टोरेज से एक या उससे ज़्यादा आइटम हटाता है. removeफ़ंक्शन इस तरह दिखता है:(keys: string | string[], callback?: function) => {...} - 
    बटनstring | string[] हटाए जाने वाले आइटम के लिए, एक कुंजी या कुंजियों की सूची. 
- 
    कॉलबैकफ़ंक्शन ज़रूरी नहीं callbackपैरामीटर ऐसा दिखता है:() => void 
 - 
            returnsPromise<void> Chrome 95+प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा. 
 
- 
    
- 
    सेट करोअमान्य प्रॉमिसयह कुकी, एक से ज़्यादा आइटम सेट करती है. setफ़ंक्शन इस तरह दिखता है:(items: object, callback?: function) => {...} - 
    आइटमऑब्जेक्ट यह एक ऐसा ऑब्जेक्ट है जो स्टोरेज को अपडेट करने के लिए, हर की/वैल्यू पेयर देता है. स्टोरेज में मौजूद अन्य कुंजियों/वैल्यू के जोड़े पर कोई असर नहीं पड़ेगा. संख्याओं जैसी प्रिमिटिव वैल्यू, उम्मीद के मुताबिक क्रम से लगाई जाएंगी. typeof"object"और"function"वाली वैल्यू आम तौर पर{}के तौर पर क्रम से लगाई जाती हैं. हालांकि,Array(उम्मीद के मुताबिक क्रम से लगाया जाता है),Date, औरRegex(Stringके तौर पर क्रम से लगाया जाता है) को छोड़कर.
- 
    कॉलबैकफ़ंक्शन ज़रूरी नहीं callbackपैरामीटर ऐसा दिखता है:() => void 
 - 
            returnsPromise<void> Chrome 95+प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा. 
 
- 
    
- 
    setAccessLevelअमान्य Promise Chrome 102 या इसके बाद के वर्शनस्टोरेज एरिया के लिए, ऐक्सेस का मनचाहा लेवल सेट करता है. डिफ़ॉल्ट रूप से, sessionस्टोरेज का इस्तेमाल सिर्फ़ भरोसेमंद कॉन्टेक्स्ट (एक्सटेंशन पेज और सर्विस वर्कर) में किया जा सकता है. वहीं,managed,local, औरsyncस्टोरेज का इस्तेमाल भरोसेमंद और गैर-भरोसेमंद, दोनों तरह के कॉन्टेक्स्ट में किया जा सकता है.setAccessLevelफ़ंक्शन इस तरह दिखता है:(accessOptions: object, callback?: function) => {...} - 
    accessOptionsऑब्जेक्ट - 
    accessLevelस्टोरेज एरिया का ऐक्सेस लेवल. 
 
- 
    
- 
    कॉलबैकफ़ंक्शन ज़रूरी नहीं callbackपैरामीटर ऐसा दिखता है:() => void 
 - 
            returnsPromise<void> प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा. 
 
- 
    
StorageChange
प्रॉपर्टी
- 
    newValueकोई भी ज़रूरी नहीं है अगर आइटम की कोई नई वैल्यू है, तो वह यहां दिखेगी. 
- 
    oldValueकोई भी ज़रूरी नहीं है अगर आइटम की कोई पुरानी वैल्यू मौजूद थी, तो यहां वह वैल्यू दिखेगी. 
प्रॉपर्टी
local
local स्टोरेज एरिया में मौजूद आइटम, हर मशीन के लिए स्थानीय होते हैं.
टाइप
StorageArea & object
प्रॉपर्टी
- 
    QUOTA_BYTES10485760 
 लोकल स्टोरेज में सेव किए जा सकने वाले डेटा की ज़्यादा से ज़्यादा साइज़ (बाइट में). इसका आकलन, हर वैल्यू के JSON स्ट्रिंगिफ़िकेशन और हर कुंजी की लंबाई के हिसाब से किया जाता है. अगर एक्सटेंशन के पास unlimitedStorageकी अनुमति है, तो इस वैल्यू को अनदेखा कर दिया जाएगा. इस सीमा से ज़्यादा अपडेट करने पर, वे तुरंत फ़ेल हो जाते हैं. साथ ही, कॉलबैक का इस्तेमाल करने परruntime.lastErrorसेट हो जाता है. इसके अलावा, async/await का इस्तेमाल करने पर, Promise को अस्वीकार कर दिया जाता है.
managed
managed स्टोरेज एरिया में मौजूद आइटम, डोमेन एडमिन की कॉन्फ़िगर की गई एंटरप्राइज़ नीति के हिसाब से सेट किए जाते हैं. साथ ही, एक्सटेंशन के लिए ये सिर्फ़ पढ़ने के लिए होते हैं. इस नेमस्पेस में बदलाव करने पर गड़बड़ी होती है. नीति को कॉन्फ़िगर करने के बारे में जानकारी पाने के लिए, स्टोरेज एरिया के लिए मेनिफ़ेस्ट देखें.
टाइप
sync
sync स्टोरेज एरिया में मौजूद आइटम, Chrome सिंक का इस्तेमाल करके सिंक किए जाते हैं.
टाइप
StorageArea & object
प्रॉपर्टी
- 
    MAX_ITEMS512 
 सिंक स्टोरेज में ज़्यादा से ज़्यादा आइटम सेव किए जा सकते हैं. अगर किसी अपडेट से यह सीमा पार हो जाती है, तो वह तुरंत फ़ेल हो जाएगा. साथ ही, कॉलबैक का इस्तेमाल करते समय या Promise अस्वीकार होने पर, runtime.lastErrorसेट हो जाएगा.
- 
    MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE1000000 
 अब सेवा में नहीं हैstorage.sync API में, अब लगातार लिखने के ऑपरेशन के लिए कोटा नहीं है. 
- 
    MAX_WRITE_OPERATIONS_PER_HOUR1800 
 हर घंटे में, set,removeयाclearके ज़्यादा से ज़्यादा कितने ऑपरेशन किए जा सकते हैं. यह हर दो सेकंड में एक बार होता है. यह, कम समय में ज़्यादा बार लिखने की सीमा से कम है.अगर किसी अपडेट से यह सीमा पार हो जाती है, तो वह तुरंत फ़ेल हो जाता है. साथ ही, कॉलबैक का इस्तेमाल करते समय या Promise अस्वीकार होने पर, runtime.lastErrorसेट हो जाता है.
- 
    MAX_WRITE_OPERATIONS_PER_MINUTE120 
 हर मिनट में, set,removeयाclearकार्रवाइयों की ज़्यादा से ज़्यादा संख्या. यह हर सेकंड में दो बार होता है. इससे कम समय में, हर घंटे में होने वाले राइट ऑपरेशन की तुलना में ज़्यादा थ्रूपुट मिलता है.अगर किसी अपडेट से यह सीमा पार हो जाती है, तो वह तुरंत फ़ेल हो जाता है. साथ ही, कॉलबैक का इस्तेमाल करते समय या Promise अस्वीकार होने पर, runtime.lastErrorसेट हो जाता है.
- 
    QUOTA_BYTES102400 
 सिंक स्टोरेज में सेव किए जा सकने वाले डेटा की कुल ज़्यादा से ज़्यादा साइज़ (बाइट में). इसका हिसाब, हर वैल्यू के JSON स्ट्रिंगिफ़िकेशन और हर कुंजी की लंबाई के हिसाब से लगाया जाता है. अगर किसी अपडेट से यह सीमा पार हो जाती है, तो वह तुरंत फ़ेल हो जाता है. साथ ही, कॉलबैक का इस्तेमाल करते समय या Promise अस्वीकार होने पर, runtime.lastErrorसेट हो जाता है.
- 
    QUOTA_BYTES_PER_ITEM8192 
 सिंक किए गए स्टोरेज में मौजूद हर आइटम का ज़्यादा से ज़्यादा साइज़ (बाइट में). इसका हिसाब, वैल्यू के JSON स्ट्रिंगिफ़िकेशन और उसकी कुंजी की लंबाई के हिसाब से लगाया जाता है. अगर अपडेट में इस सीमा से ज़्यादा साइज़ वाले आइटम शामिल हैं, तो अपडेट तुरंत फ़ेल हो जाएगा. साथ ही, कॉलबैक का इस्तेमाल करते समय या Promise अस्वीकार होने पर, runtime.lastErrorसेट हो जाएगा.
इवेंट
onChanged
chrome.storage.onChanged.addListener(
callback: function,
)
जब एक या उससे ज़्यादा आइटम में बदलाव होता है, तब यह इवेंट ट्रिगर होता है.
पैरामीटर
- 
    कॉलबैकफ़ंक्शन callbackपैरामीटर ऐसा दिखता है:(changes: object, areaName: string) => void - 
    बदलावऑब्जेक्ट 
- 
    areaNameस्ट्रिंग 
 
-