chrome.storage

ब्यौरा

उपयोगकर्ता के डेटा में हुए बदलावों को सेव करने, वापस पाने, और ट्रैक करने के लिए, chrome.storage एपीआई का इस्तेमाल करें.

अनुमतियां

storage

Storage API का इस्तेमाल करने के लिए, एक्सटेंशन के मेनिफ़ेस्ट में "storage" अनुमति का एलान करें. उदाहरण के लिए:

{
  "name": "My extension",
  ...
  "permissions": [
    "storage"
  ],
  ...
}

कॉन्सेप्ट और इस्तेमाल

Storage API, उपयोगकर्ता के डेटा और स्थिति को सेव करने के लिए, एक्सटेंशन के हिसाब से एक तरीका उपलब्ध कराता है. यह वेब प्लैटफ़ॉर्म के स्टोरेज एपीआई (IndexedDB और Storage) की तरह ही है. हालांकि, इसे एक्सटेंशन के स्टोरेज की ज़रूरतों को पूरा करने के लिए डिज़ाइन किया गया था. यहां कुछ मुख्य सुविधाओं के बारे में बताया गया है:

  • एक्सटेंशन के सभी कॉन्टेक्स्ट, जैसे कि एक्सटेंशन सेवा वर्कर और कॉन्टेंट स्क्रिप्ट के पास, Storage API का ऐक्सेस होता है.
  • JSON में सीरियल की जा सकने वाली वैल्यू, ऑब्जेक्ट प्रॉपर्टी के तौर पर सेव की जाती हैं.
  • Storage API, एक साथ कई फ़ाइलें पढ़ने और लिखने की सुविधा के साथ काम नहीं करता.
  • भले ही, उपयोगकर्ता कैश मेमोरी और ब्राउज़िंग इतिहास मिटा दे, लेकिन डेटा सेव रहता है.
  • सेव की गई सेटिंग, स्प्लिट गुप्त मोड का इस्तेमाल करने पर भी बनी रहती हैं.
  • इसमें एंटरप्राइज़ नीतियों के लिए, रीड-ओनली वाला खास मैनेज किया जाने वाला स्टोरेज शामिल होता है.

क्या एक्सटेंशन, वेब स्टोरेज एपीआई का इस्तेमाल कर सकते हैं?

एक्सटेंशन, कुछ कॉन्टेक्स्ट (पॉप-अप और अन्य एचटीएमएल पेज) में Storage इंटरफ़ेस (window.localStorage से ऐक्सेस किया जा सकता है) का इस्तेमाल कर सकते हैं. हालांकि, हमारा सुझाव है कि आप ऐसा न करें. इसकी ये वजहें हैं:

  • एक्सटेंशन सर्विस वर्कर, वेब स्टोरेज एपीआई का इस्तेमाल नहीं कर सकते.
  • कॉन्टेंट स्क्रिप्ट, होस्ट पेज के साथ स्टोरेज शेयर करती हैं.
  • जब उपयोगकर्ता अपना ब्राउज़िंग इतिहास मिटाता है, तो Web Storage API का इस्तेमाल करके सेव किया गया डेटा मिट जाता है.

किसी सेवा वर्कर से, वेब स्टोरेज एपीआई से एक्सटेंशन स्टोरेज एपीआई में डेटा ट्रांसफ़र करने के लिए:

  1. ऑफ़स्क्रीन दस्तावेज़ का एचटीएमएल पेज और स्क्रिप्ट फ़ाइल तैयार करें. स्क्रिप्ट फ़ाइल में कन्वर्ज़न रूटीन और onMessage हैंडलर होना चाहिए.
  2. एक्सटेंशन के सेवा वर्कर में, अपने डेटा के लिए chrome.storage देखें.
  3. अगर आपको अपना डेटा नहीं मिलता है, तो createDocument() पर कॉल करें.
  4. रिटर्न किया गया प्रॉमिस पूरा होने के बाद, कन्वर्ज़न रूटीन शुरू करने के लिए sendMessage() को कॉल करें.
  5. ऑफ़स्क्रीन दस्तावेज़ के onMessage हैंडलर में, कन्वर्ज़न रूटीन को कॉल करें.

एक्सटेंशन में वेब स्टोरेज एपीआई के काम करने के तरीके में भी कुछ बारीकियां हैं. ज़्यादा जानने के लिए, स्टोरेज और कुकी लेख पढ़ें.

स्टोरेज के लिए जगह

Storage API को इन स्टोरेज एरिया में बांटा गया है:

storage.local
डेटा को लोकल स्टोरेज में सेव किया जाता है. एक्सटेंशन हटाने पर, डेटा मिट जाता है. स्टोरेज की सीमा 10 एमबी है. हालांकि, "unlimitedStorage" अनुमति का अनुरोध करके, इसे बढ़ाया जा सकता है. Chrome 113 और उससे पहले के वर्शन में, स्टोरेज की सीमा 5 एमबी है. हमारा सुझाव है कि ज़्यादा डेटा सेव करने के लिए, storage.local का इस्तेमाल करें.
storage.managed
मैनेज किया जा रहा स्टोरेज, नीति के तहत इंस्टॉल किए गए एक्सटेंशन के लिए रीड-ओनली स्टोरेज होता है. इसे सिस्टम एडमिन मैनेज करते हैं. इसके लिए, वे डेवलपर के तय किए गए स्कीमा और एंटरप्राइज़ नीतियों का इस्तेमाल करते हैं. नीतियां, विकल्पों जैसी ही होती हैं. हालांकि, इन्हें उपयोगकर्ता के बजाय सिस्टम एडमिन कॉन्फ़िगर करता है. इससे, किसी संगठन के सभी उपयोगकर्ताओं के लिए एक्सटेंशन को पहले से कॉन्फ़िगर किया जा सकता है. नीतियों के बारे में जानकारी के लिए, एडमिन के लिए दस्तावेज़ देखें. managed स्टोरेज एरिया के बारे में ज़्यादा जानने के लिए, स्टोरेज एरिया के लिए मेनिफ़ेस्ट देखें.
storage.session
ब्राउज़र सेशन के दौरान, डेटा को मेमोरी में सेव रखता है. डिफ़ॉल्ट रूप से, यह कॉन्टेंट स्क्रिप्ट के लिए उपलब्ध नहीं होता. हालांकि, chrome.storage.session.setAccessLevel() सेट करके, इस व्यवहार को बदला जा सकता है. स्टोरेज की सीमा 10 एमबी है. Chrome 111 और उससे पहले के वर्शन में, यह सीमा 1 एमबी थी. storage.session इंटरफ़ेस, सेवा वर्कर के लिए सुझाए गए कई इंटरफ़ेस में से एक है.
storage.sync
अगर सिंक करने की सुविधा चालू है, तो डेटा उस Chrome ब्राउज़र से सिंक हो जाता है जिसमें उपयोगकर्ता ने लॉग इन किया है. बंद होने पर, यह storage.local की तरह काम करता है. ब्राउज़र के ऑफ़लाइन होने पर, Chrome डेटा को डिवाइस में सेव करता है. साथ ही, ब्राउज़र के ऑनलाइन होने पर, डेटा को सिंक करना फिर से शुरू कर देता है. कोटा की सीमा करीब 100 केबी है. हर आइटम के लिए 8 केबी. हमारा सुझाव है कि सिंक किए गए सभी ब्राउज़र में उपयोगकर्ता की सेटिंग को सेव करने के लिए, storage.sync का इस्तेमाल करें. अगर उपयोगकर्ता के संवेदनशील डेटा के साथ काम किया जा रहा है, तो इसके बजाय storage.session का इस्तेमाल करें.

स्टोरेज और ट्रॉथलिंग की सीमाएं

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 इवेंट हैंडलर का इस्तेमाल करता है जो अपने लॉजिक को लागू करने से पहले, 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);
});

उदाहरण

यहां दिए गए सैंपल में, local, sync, और session स्टोरेज एरिया दिखाए गए हैं:

लोकल

chrome.storage.local.set({ key: value }).then(() => {
  console.log("Value is set");
});

chrome.storage.local.get(["key"]).then((result) => {
  console.log("Value is " + result.key);
});

सिंक करें

chrome.storage.sync.set({ key: value }).then(() => {
  console.log("Value is set");
});

chrome.storage.sync.get(["key"]).then((result) => {
  console.log("Value is " + result.key);
});

सेशन

chrome.storage.session.set({ key: value }).then(() => {
  console.log("Value was set");
});

chrome.storage.session.get(["key"]).then((result) => {
  console.log("Value is " + result.key);
});

Storage API के अन्य डेमो देखने के लिए, इनमें से कोई सैंपल एक्सप्लोर करें:

टाइप

AccessLevel

Chrome 102 और उसके बाद के वर्शन

स्टोरेज एरिया का ऐक्सेस लेवल.

Enum

"TRUSTED_CONTEXTS"
इससे, एक्सटेंशन से शुरू होने वाले कॉन्टेक्स्ट के बारे में पता चलता है.

"TRUSTED_AND_UNTRUSTED_CONTEXTS"
इससे, एक्सटेंशन के बाहर से आने वाले कॉन्टेक्स्ट के बारे में पता चलता है.

StorageArea

प्रॉपर्टी

  • onChanged

    Event<functionvoidvoid>

    Chrome 73 और उसके बाद के वर्शन

    एक या उससे ज़्यादा आइटम बदलने पर ट्रिगर होता है.

    onChanged.addListener फ़ंक्शन इस तरह दिखता है:

    (callback: function) => {...}

    • कॉलबैक

      फ़ंक्शन

      callback पैरामीटर इस तरह दिखता है:

      (changes: object) => void

      • बदलाव

        ऑब्जेक्ट

  • मिटाएं

    अमान्य

    वादा करना

    स्टोरेज से सभी आइटम हटा देता है.

    clear फ़ंक्शन इस तरह दिखता है:

    (callback?: function) => {...}

    • कॉलबैक

      फ़ंक्शन ज़रूरी नहीं

      callback पैरामीटर इस तरह दिखता है:

      () => void

    • returns

      Promise<void>

      Chrome 88 और उसके बाद के वर्शन

      मेनिफ़ेस्ट के V3 और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

  • सदस्यता लें

    अमान्य

    वादा करना

    स्टोरेज से एक या उससे ज़्यादा आइटम पाता है.

    get फ़ंक्शन इस तरह दिखता है:

    (keys?: string | string[] | object, callback?: function) => {...}

    • बटन

      string | string[] | object ज़रूरी नहीं

      एक कुंजी, कुंजियों की सूची या डिफ़ॉल्ट वैल्यू बताने वाली डिक्शनरी (ऑब्जेक्ट की जानकारी देखें). खाली सूची या ऑब्जेक्ट से, खाली नतीजा ऑब्जेक्ट मिलेगा. स्टोरेज का पूरा कॉन्टेंट पाने के लिए, null डालें.

    • कॉलबैक

      फ़ंक्शन ज़रूरी नहीं

      callback पैरामीटर इस तरह दिखता है:

      (items: object) => void

      • आइटम

        ऑब्जेक्ट

        आइटम के साथ-साथ उनकी कुंजी-वैल्यू मैपिंग वाला ऑब्जेक्ट.

    • returns

      Promise<object>

      Chrome 88 और उसके बाद के वर्शन

      मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

  • getBytesInUse

    अमान्य

    वादा करना

    इससे पता चलता है कि एक या उससे ज़्यादा आइटम कितनी जगह (बाइट में) का इस्तेमाल कर रहे हैं.

    getBytesInUse फ़ंक्शन इस तरह दिखता है:

    (keys?: string | string[], callback?: function) => {...}

    • बटन

      string | string[] ज़रूरी नहीं

      किसी एक कुंजी या कुंजियों की सूची का कुल इस्तेमाल जानने के लिए. खाली सूची से 0 दिखेगा. पूरे स्टोरेज के इस्तेमाल की जानकारी पाने के लिए, null डालें.

    • कॉलबैक

      फ़ंक्शन ज़रूरी नहीं

      callback पैरामीटर इस तरह दिखता है:

      (bytesInUse: number) => void

      • bytesInUse

        संख्या

        स्टोरेज में इस्तेमाल की जा रही जगह की जानकारी, बाइट में.

    • returns

      Promise<number>

      Chrome 88 और उसके बाद के वर्शन

      मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

  • getKeys

    अमान्य

    Promise Chrome 130 और उसके बाद के वर्शन के लिए

    स्टोरेज से सभी कुंजियां पाता है.

    getKeys फ़ंक्शन इस तरह दिखता है:

    (callback?: function) => {...}

    • कॉलबैक

      फ़ंक्शन ज़रूरी नहीं

      callback पैरामीटर इस तरह दिखता है:

      (keys: string[]) => void

      • बटन

        string[]

        स्टोरेज से पढ़ी गई कुंजियों वाला कलेक्शन.

    • returns

      Promise<string[]>

      मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

  • कॉन्टेंट हटाना

    अमान्य

    वादा करना

    स्टोरेज से एक या उससे ज़्यादा आइटम हटाता है.

    remove फ़ंक्शन इस तरह दिखता है:

    (keys: string | string[], callback?: function) => {...}

    • बटन

      string | string[]

      हटाए जाने वाले आइटम के लिए, एक कुंजी या कुंजियों की सूची.

    • कॉलबैक

      फ़ंक्शन ज़रूरी नहीं

      callback पैरामीटर इस तरह दिखता है:

      () => void

    • returns

      Promise<void>

      Chrome 88 और उसके बाद के वर्शन

      मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

  • सेट करो

    अमान्य

    वादा करना

    एक से ज़्यादा आइटम सेट करता है.

    set फ़ंक्शन इस तरह दिखता है:

    (items: object, callback?: function) => {...}

    • आइटम

      ऑब्जेक्ट

      एक ऑब्जेक्ट, जो स्टोरेज को अपडेट करने के लिए हर की/वैल्यू पेयर देता है. स्टोरेज में मौजूद किसी भी अन्य की/वैल्यू पेयर पर इसका कोई असर नहीं पड़ेगा.

      संख्याओं जैसी प्राइमिटिव वैल्यू, उम्मीद के मुताबिक क्रम से लगाई जाएंगी. आम तौर पर, typeof "object", और "function" वाली वैल्यू, {} में सीरियलाइज़ हो जाएंगी. हालांकि, Array (जैसा कि उम्मीद है वैसा ही सीरियलाइज़ होता है), Date, और Regex (उनके String रेप्रज़ेंटेशन का इस्तेमाल करके सीरियलाइज़ होता है) को छोड़कर.

    • कॉलबैक

      फ़ंक्शन ज़रूरी नहीं

      callback पैरामीटर इस तरह दिखता है:

      () => void

    • returns

      Promise<void>

      Chrome 88 और उसके बाद के वर्शन

      मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

  • setAccessLevel

    अमान्य

    Promise Chrome 102 और उसके बाद के वर्शन

    स्टोरेज एरिया के लिए, ऐक्सेस का लेवल सेट करता है. डिफ़ॉल्ट रूप से, सिर्फ़ भरोसेमंद कॉन्टेक्स्ट इस्तेमाल किए जाएंगे.

    setAccessLevel फ़ंक्शन इस तरह दिखता है:

    (accessOptions: object, callback?: function) => {...}

    • accessOptions

      ऑब्जेक्ट

      • accessLevel

        स्टोरेज एरिया का ऐक्सेस लेवल.

    • कॉलबैक

      फ़ंक्शन ज़रूरी नहीं

      callback पैरामीटर इस तरह दिखता है:

      () => void

    • returns

      Promise<void>

      मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

StorageChange

प्रॉपर्टी

  • newValue

    कोई भी ज़रूरी नहीं है

    अगर कोई नई वैल्यू है, तो आइटम की नई वैल्यू.

  • oldValue

    कोई भी ज़रूरी नहीं है

    अगर आइटम की कोई पुरानी वैल्यू थी, तो वह वैल्यू.

प्रॉपर्टी

local

local स्टोरेज एरिया में मौजूद आइटम, हर मशीन के लिए स्थानीय होते हैं.

टाइप

StorageArea और ऑब्जेक्ट

प्रॉपर्टी

  • QUOTA_BYTES

    10485760

    लोकल स्टोरेज में ज़्यादा से ज़्यादा कितना डेटा (बाइट में) सेव किया जा सकता है. इसे हर वैल्यू और हर बटन की लंबाई के JSON स्ट्रिंगफ़िकेशन से मेज़र किया जाता है. अगर एक्सटेंशन के पास unlimitedStorage अनुमति है, तो इस वैल्यू को अनदेखा कर दिया जाएगा. जिन अपडेट की वजह से यह सीमा पार हो जाएगी वे तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर runtime.lastError सेट हो जाएगा या async/await का इस्तेमाल करने पर, अस्वीकार किया गया Promise सेट हो जाएगा.

managed

managed स्टोरेज एरिया में मौजूद आइटम, डोमेन एडमिन की कॉन्फ़िगर की गई एंटरप्राइज़ नीति के हिसाब से सेट होते हैं. ये आइटम, एक्सटेंशन के लिए रीड-ओनली होते हैं. इस नेमस्पेस में बदलाव करने पर गड़बड़ी का मैसेज मिलता है. नीति को कॉन्फ़िगर करने के बारे में जानने के लिए, स्टोरेज एरिया के लिए मेनिफ़ेस्ट देखें.

टाइप

session

Chrome 102 और उसके बाद के वर्शन MV3 और उसके बाद के वर्शन

session स्टोरेज एरिया में मौजूद आइटम, मेमोरी में सेव किए जाते हैं और डिस्क में सेव नहीं किए जाते.

टाइप

StorageArea और ऑब्जेक्ट

प्रॉपर्टी

  • QUOTA_BYTES

    10485760

    मेमोरी में ज़्यादा से ज़्यादा कितना डेटा (बाइट में) स्टोर किया जा सकता है. इसे मेज़र करने के लिए, हर वैल्यू और कुंजी के लिए डाइनैमिक तौर पर एलोकेट की गई मेमोरी के इस्तेमाल का अनुमान लगाया जाता है. जिन अपडेट की वजह से यह सीमा पार हो जाएगी वे तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर या किसी प्रॉमिस के अस्वीकार होने पर, runtime.lastError सेट हो जाएगा.

sync

sync स्टोरेज एरिया में मौजूद आइटम, Chrome सिंक की मदद से सिंक किए जाते हैं.

टाइप

StorageArea और ऑब्जेक्ट

प्रॉपर्टी

  • MAX_ITEMS

    512

    सिंक किए गए स्टोरेज में ज़्यादा से ज़्यादा कितने आइटम सेव किए जा सकते हैं. जिन अपडेट की वजह से यह सीमा पार हो जाएगी वे तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर या किसी प्रॉमिस के अस्वीकार होने पर, runtime.lastError सेट हो जाएगा.

  • MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE

    1000000

    अब काम नहीं करता

    storage.sync API में, अब लगातार डेटा लिखने की सीमा नहीं है.

  • MAX_WRITE_OPERATIONS_PER_HOUR

    1800

    हर घंटे set, remove या clear ऑपरेशन किए जा सकते हैं. यह हर दो सेकंड में एक है, जो हर मिनट में लिखे जाने वाले डेटा की कम सीमा है.

    जिन अपडेट की वजह से यह सीमा पार हो जाएगी वे तुरंत बंद हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर या किसी प्रॉमिस को अस्वीकार किए जाने पर, runtime.lastError सेट हो जाएगा.

  • MAX_WRITE_OPERATIONS_PER_MINUTE

    120

    हर मिनट में set, remove या clear ऑपरेशन किए जा सकते हैं. यह हर सेकंड में दो है, जो कम समय में हर घंटे के हिसाब से लिखे जाने वाले डेटा की तुलना में ज़्यादा थ्रूपुट देता है.

    जिन अपडेट की वजह से यह सीमा पार हो जाएगी वे तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर या किसी प्रॉमिस के अस्वीकार होने पर, runtime.lastError सेट हो जाएगा.

  • QUOTA_BYTES

    102400

    सिंक स्टोरेज में ज़्यादा से ज़्यादा कितना डेटा (बाइट में) सेव किया जा सकता है. इसे हर वैल्यू के जेएसओएन स्ट्रिंगफ़िकेशन और हर बटन की लंबाई के हिसाब से मेज़र किया जाता है. जिन अपडेट की वजह से यह सीमा पार हो जाएगी वे तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर या किसी प्रॉमिस को अस्वीकार किए जाने पर, runtime.lastError सेट हो जाएगा.

  • QUOTA_BYTES_PER_ITEM

    8192

    सिंक किए गए स्टोरेज में मौजूद हर आइटम का ज़्यादा से ज़्यादा साइज़ (बाइट में). इसे, वैल्यू के JSON स्ट्रिंगफ़िकेशन और उसकी कुंजी की लंबाई के हिसाब से मेज़र किया जाता है. इस सीमा से ज़्यादा आइटम वाले अपडेट तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर या किसी प्रॉमिस के अस्वीकार होने पर, runtime.lastError सेट हो जाएगा.

इवेंट

onChanged

chrome.storage.onChanged.addListener(
  callback: function,
)

एक या उससे ज़्यादा आइटम बदलने पर ट्रिगर होता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

    callback पैरामीटर इस तरह दिखता है:

    (changes: object, areaName: string) => void

    • बदलाव

      ऑब्जेक्ट

    • areaName

      स्ट्रिंग