ब्यौरा
उपयोगकर्ता के डेटा में हुए बदलावों को सेव करने, वापस पाने, और ट्रैक करने के लिए, chrome.storage
एपीआई का इस्तेमाल करें.
अनुमतियां
storage
खास जानकारी
Storage API, उपयोगकर्ता के डेटा और स्थिति को सेव करने के लिए, एक्सटेंशन के हिसाब से एक तरीका उपलब्ध कराता है. यह वेब प्लैटफ़ॉर्म के स्टोरेज एपीआई (IndexedDB और Storage) की तरह ही है. हालांकि, इसे एक्सटेंशन के स्टोरेज की ज़रूरतों को पूरा करने के लिए डिज़ाइन किया गया था. यहां कुछ मुख्य सुविधाओं के बारे में बताया गया है:
- एक्सटेंशन के सभी कॉन्टेक्स्ट, जैसे कि एक्सटेंशन सेवा वर्कर और कॉन्टेंट स्क्रिप्ट के पास, Storage API का ऐक्सेस होता है.
- JSON में सीरियलाइज़ की जा सकने वाली वैल्यू, ऑब्जेक्ट प्रॉपर्टी के तौर पर सेव की जाती हैं.
- Storage API, एक साथ कई फ़ाइलें पढ़ने और लिखने की सुविधा के साथ काम नहीं करता.
- भले ही, उपयोगकर्ता कैश मेमोरी और ब्राउज़िंग इतिहास मिटा दे, लेकिन डेटा सेव रहता है.
- सेव की गई सेटिंग, स्प्लिट गुप्त मोड का इस्तेमाल करने पर भी बनी रहती हैं.
- इसमें एंटरप्राइज़ नीतियों के लिए, रीड-ओनली वाला खास मैनेज किया जाने वाला स्टोरेज शामिल होता है.
एक्सटेंशन, कुछ कॉन्टेक्स्ट (पॉप-अप और अन्य HTML पेज) में [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 ऑफ़लाइन होता है, तब वह डेटा को डिवाइस में सेव करता है. साथ ही, ऑनलाइन होने पर डेटा को सिंक करना फिर से शुरू करता है. कोटा की सीमा करीब 100 केबी है. हर आइटम के लिए 8 केबी. सिंक किए गए सभी ब्राउज़र में उपयोगकर्ता की सेटिंग को सेव करने के लिए, इसका इस्तेमाल करें.
- storage.session
- ब्राउज़र सेशन के दौरान, डेटा को मेमोरी में सेव रखता है. डिफ़ॉल्ट रूप से, यह कॉन्टेंट स्क्रिप्ट के लिए उपलब्ध नहीं होता. हालांकि,
chrome.storage.session.setAccessLevel()
सेट करके, इस व्यवहार को बदला जा सकता है. कोटा की सीमा करीब 10 एमबी है. इसका इस्तेमाल करके, सेवा वर्कर के हर रन में ग्लोबल वैरिएबल सेव करें.
- storage.managed
- एडमिन, मैनेज किए जा रहे एनवायरमेंट में काम करने वाले एक्सटेंशन की सेटिंग कॉन्फ़िगर करने के लिए, स्कीमा और एंटरप्राइज़ नीतियों का इस्तेमाल कर सकते हैं. इस स्टोरेज में मौजूद फ़ाइलों को सिर्फ़ पढ़ा जा सकता है.
मेनिफ़ेस्ट
Storage API का इस्तेमाल करने के लिए, एक्सटेंशन के मेनिफ़ेस्ट में "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
इवेंट हैंडलर का इस्तेमाल करता है जो अपने लॉजिक को लागू करने से पहले, 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
प्रॉपर्टी
-
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 और उसके बाद के वर्शनप्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन के साथ काम करते हैं. अन्य प्लैटफ़ॉर्म के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है.
-
-
getBytesInUse
अमान्य
वादा करनाइससे एक या उससे ज़्यादा आइटम के इस्तेमाल में मौजूद स्पेस (बाइट में) की जानकारी मिलती है.
getBytesInUse
फ़ंक्शन इस तरह दिखता है:(keys?: string | string[], callback?: function) => {...}
-
बटन
string | string[] ज़रूरी नहीं
कुल इस्तेमाल का डेटा पाने के लिए, एक कुंजी या कुंजियों की सूची. खाली सूची से 0 दिखेगा. पूरे स्टोरेज के इस्तेमाल की जानकारी पाने के लिए,
null
डालें. -
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(bytesInUse: number) => void
-
bytesInUse
संख्या
स्टोरेज में इस्तेमाल की जा रही जगह की जानकारी, बाइट में.
-
-
returns
Promise<number>
Chrome 88 और उसके बाद के वर्शनप्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन के साथ काम करते हैं. अन्य प्लैटफ़ॉर्म के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है.
-
-
getKeys
अमान्य
Promise Chrome 130 और उसके बाद के वर्शन के लिएस्टोरेज से सभी कुंजियां पाता है.
getKeys
फ़ंक्शन इस तरह दिखता है:(callback?: function) => {...}
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(keys: string[]) => void
-
बटन
string[]
स्टोरेज से पढ़ी गई कुंजियों वाला कलेक्शन.
-
-
returns
Promise<string[]>
प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन के साथ काम करते हैं. अन्य प्लैटफ़ॉर्म के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है.
-
-
कॉन्टेंट हटाना
अमान्य
वादा करनास्टोरेज से एक या उससे ज़्यादा आइटम हटाता है.
remove
फ़ंक्शन इस तरह दिखता है:(keys: string | string[], callback?: function) => {...}
-
बटन
string | string[]
हटाए जाने वाले आइटम के लिए, एक कुंजी या कुंजियों की सूची.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
-
returns
Promise<void>
Chrome 88 और उसके बाद के वर्शनप्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन के साथ काम करते हैं. अन्य प्लैटफ़ॉर्म के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है.
-
-
सेट करो
अमान्य
वादा करनाएक से ज़्यादा आइटम सेट करता है.
set
फ़ंक्शन इस तरह दिखता है:(items: object, callback?: function) => {...}
-
आइटम
ऑब्जेक्ट
एक ऑब्जेक्ट, जो स्टोरेज को अपडेट करने के लिए हर की/वैल्यू पेयर देता है. स्टोरेज में मौजूद किसी भी अन्य की/वैल्यू पेयर पर इसका कोई असर नहीं पड़ेगा.
संख्याओं जैसी प्राइमटिव वैल्यू, उम्मीद के मुताबिक सीरियलाइज़ हो जाएंगी. आम तौर पर,
typeof
"object"
, और"function"
वाली वैल्यू,{}
के तौर पर सीरियलाइज़ होंगी. हालांकि,Array
(जैसा कि उम्मीद है वैसा ही सीरियलाइज़ होता है),Date
, औरRegex
(उनकेString
रेप्रज़ेंटेशन का इस्तेमाल करके सीरियलाइज़ होता है) को छोड़कर. -
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
-
returns
Promise<void>
Chrome 88 और उसके बाद के वर्शनप्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन के साथ काम करते हैं. अन्य प्लैटफ़ॉर्म के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है.
-
-
setAccessLevel
अमान्य
Promise Chrome 102 और उसके बाद के वर्शनस्टोरेज एरिया के लिए, ऐक्सेस का लेवल सेट करता है. डिफ़ॉल्ट रूप से, सिर्फ़ भरोसेमंद कॉन्टेक्स्ट ही दिखेंगे.
setAccessLevel
फ़ंक्शन इस तरह दिखता है:(accessOptions: object, callback?: function) => {...}
-
accessOptions
ऑब्जेक्ट
-
accessLevel
स्टोरेज एरिया का ऐक्सेस लेवल.
-
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
-
returns
Promise<void>
प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और उसके बाद के वर्शन के साथ काम करते हैं. अन्य प्लैटफ़ॉर्म के लिए, कॉलबैक का इस्तेमाल करना ज़रूरी है.
-
StorageChange
प्रॉपर्टी
-
newValue
कोई भी ज़रूरी नहीं है
अगर कोई नई वैल्यू है, तो आइटम की नई वैल्यू.
-
oldValue
कोई भी ज़रूरी नहीं है
अगर आइटम की कोई पुरानी वैल्यू थी, तो वह वैल्यू.
प्रॉपर्टी
local
local
स्टोरेज एरिया में मौजूद आइटम, हर मशीन के लिए स्थानीय होते हैं.
टाइप
StorageArea और ऑब्जेक्ट
प्रॉपर्टी
-
QUOTA_BYTES
10485760
लोकल स्टोरेज में ज़्यादा से ज़्यादा कितना डेटा (बाइट में) सेव किया जा सकता है. इसे हर वैल्यू और हर बटन की लंबाई के JSON स्ट्रिंगफ़िकेशन से मेज़र किया जाता है. अगर एक्सटेंशन के पास
unlimitedStorage
अनुमति है, तो इस वैल्यू को अनदेखा कर दिया जाएगा. जिन अपडेट की वजह से यह सीमा पार हो जाएगी वे तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने परruntime.lastError
सेट हो जाएगा या async/await का इस्तेमाल करने पर, अस्वीकार किया गया Promise सेट हो जाएगा.
managed
managed
स्टोरेज एरिया में मौजूद आइटम, डोमेन एडमिन की कॉन्फ़िगर की गई एंटरप्राइज़ नीति के हिसाब से सेट होते हैं. ये एक्सटेंशन के लिए रीड-ओनली होते हैं. इस नेमस्पेस में बदलाव करने पर गड़बड़ी का मैसेज मिलता है. नीति को कॉन्फ़िगर करने के बारे में जानने के लिए, स्टोरेज एरिया के लिए मेनिफ़ेस्ट देखें.
टाइप
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 स्ट्रिंगफ़िकेशन और उसकी कुंजी की लंबाई के हिसाब से मेज़र किया जाता है. इस सीमा से ज़्यादा आइटम वाले अपडेट तुरंत फ़ेल हो जाएंगे. साथ ही, कॉलबैक का इस्तेमाल करने पर या Promise अस्वीकार होने पर,
runtime.lastError
सेट हो जाएगा.
इवेंट
onChanged
chrome.storage.onChanged.addListener(
callback: function,
)
एक या उससे ज़्यादा आइटम बदलने पर ट्रिगर होता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callback
पैरामीटर इस तरह दिखता है:(changes: object, areaName: string) => void
-
बदलाव
ऑब्जेक्ट
-
areaName
स्ट्रिंग
-