refresh date: 2026-09-25 robots: noindex
বিবরণ
ব্যবহারকারীর ডেটা স্টোর, ফিরিয়ে আনা এবং ট্র্যাক করার জন্য chrome.storage API ব্যবহার করুন।
অনুমতি
storageএক নজরে
Storage API ব্যবহারকারীর ডেটা ও অবস্থা বজায় রাখার জন্য এক্সটেনশন-নির্দিষ্ট উপায় প্রদান করে। এটি ওয়েব প্ল্যাটফর্মের স্টোরেজ API-এর (IndexedDB ও Storage) মতো, তবে এক্সটেনশনের স্টোরেজ সংক্রান্ত প্রয়োজনীয়তা পূরণ করার জন্য ডিজাইন করা হয়েছে। নিচে কয়েকটি গুরুত্বপূর্ণ ফিচার উল্লেখ করা হল:
- এক্সটেনশন সার্ভিস ওয়ার্কার ও কন্টেন্ট স্ক্রিপ্ট সহ সব এক্সটেনশন কনটেক্সটের Storage API-তে অ্যাক্সেস আছে।
- JSON সিরিয়ালাইজ করা ভ্যালু অবজেক্ট প্রপার্টি হিসেবে স্টোর করা হয়।
- Storage API হল বাল্ক রিড ও রাইট অপারেশন সহ অ্যাসিঙ্ক্রোনাস।
- ব্যবহারকারী ক্যাশে ও ব্রাউজিং ইতিহাস মুছে দিলেও ডেটা থেকে যায়।
- স্প্লিট ছদ্মবেশী ব্যবহার করার সময়ও সেভ করা সেটিংস বজায় থাকে।
- এন্টারপ্রাইজ নীতির জন্য এক্সক্লুসিভ শুধু-পড়ার-উপযোগী ম্যানেজ করা স্টোরেজ এরিয়া অন্তর্ভুক্ত করে।
যদিও এক্সটেনশন কিছু প্রসঙ্গে (পপ-আপ এবং অন্যান্য HTML পৃষ্ঠা) [Storage][mdn-storage] ইন্টারফেস (window.localStorage থেকে অ্যাক্সেসযোগ্য) ব্যবহার করতে পারে, তবে নিম্নলিখিত কারণে এটি ব্যবহার করার সাজেশন দেওয়া হয় না:
- এক্সটেনশনের সার্ভিস ওয়ার্কার
Storageঅ্যাক্সেস করতে পারছে না। - কন্টেন্ট স্ক্রিপ্ট, হোস্ট পৃষ্ঠার সাথে স্টোরেজ শেয়ার করে।
- ব্যবহারকারী তার ব্রাউজিং ইতিহাস মুছে দিলে
Storageইন্টারফেস ব্যবহার করে সেভ করা ডেটা হারিয়ে যায়।
কোনও সার্ভিস ওয়ার্কার থেকে এক্সটেনশন স্টোরেজ API-তে ওয়েব স্টোরেজ API থেকে ডেটা সরাতে:
- কনভার্সন রুটিন ও [
onMessage][on-message] হ্যান্ডলার সহ অফস্ক্রিন ডকুমেন্ট তৈরি করুন। - অফস্ক্রিন ডকুমেন্টে কনভার্সন রুটিন যোগ করুন।
- এক্সটেনশন সার্ভিস ওয়ার্কারে আপনার ডেটার জন্য
chrome.storageচেক করুন। - আপনার ডেটা খুঁজে পাওয়া না গেলে, অফস্ক্রিন ডকুমেন্ট [তৈরি করুন][create-offscreen] এবং কনভার্সন রুটিন শুরু করতে [
sendMessage()][send-message] কল করুন। - অফস্ক্রিন ডকুমেন্টের
onMessageহ্যান্ডলারের মধ্যে, কনভার্সন রুটিন কল করুন।
এছাড়াও, এক্সটেনশনে ওয়েব স্টোরেজ API কীভাবে কাজ করে সেই বিষয়ে কিছু সূক্ষ্ম পার্থক্য আছে। [স্টোরেজ ও কুকি][storage-and-cookies] নিবন্ধ থেকে আরও জানুন।
স্টোরেজ এরিয়া
Storage API নিম্নলিখিত চারটি বাকেটে ("স্টোরেজ এরিয়া") বিভক্ত:
storage.local- ডেটা লোকালি স্টোর করা হয়, যা এক্সটেনশন সরিয়ে দিলে মুছে যায়। কোটার সীমা প্রায় ১০ এমবি, তবে
"unlimitedStorage"অনুমতির জন্য অনুরোধ করে এটি বাড়ানো যেতে পারে। আরও বেশি ডেটা স্টোর করার জন্য এটি ব্যবহার করার কথা বিবেচনা করুন।
storage.sync- সিঙ্ক করার সুবিধা চালু থাকলে, ব্যবহারকারী লগ-ইন করে আছেন এমন যেকোনও Chrome ব্রাউজারে ডেটা সিঙ্ক করা হয়। বন্ধ করা থাকলে, এটি
storage.local-এর মতো কাজ করে। ব্রাউজার অফলাইন থাকলে Chrome স্থানীয়ভাবে ডেটা স্টোর করে এবং অনলাইন হলে আবার সিঙ্ক করা শুরু করে। কোটার সীমা হল আনুমানিক ১০০ কেবি, আইটেম প্রতি ৮ কেবি। সিঙ্ক করা ব্রাউজার জুড়ে ব্যবহারকারীর সেটিংস সংরক্ষণ করতে এটি ব্যবহার করার কথা বিবেচনা করুন।
- storage.session
- ব্রাউজার সেশনের সময়সীমা পর্যন্ত মেমরিতে ডেটা ধরে রাখে। ডিফল্ট হিসেবে, এটি কন্টেন্ট স্ক্রিপ্টে দেখানো হয় না, তবে
chrome.storage.session.setAccessLevel()সেট করে এই আচরণ পরিবর্তন করা যেতে পারে। কোটার সীমা প্রায় ১০ এমবি। সার্ভিস ওয়ার্কার রান জুড়ে গ্লোবাল ভেরিয়েবেল স্টোর করার জন্য এটি ব্যবহার করার কথা বিবেচনা করুন।
- storage.managed
- অ্যাডমিনিস্ট্রেটররা ম্যানেজ করা পরিবেশে সহায়ক এক্সটেনশনের সেটিংস কনফিগার করতে স্কিমা এবং এন্টারপ্রাইজ নীতি ব্যবহার করতে পারেন। এই স্টোরেজ এরিয়া শুধু পড়া যাবে।
ম্যানিফেস্ট
স্টোরেজ 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);
}
});
স্টোরেজ থেকে অ্যাসিঙ্ক্রোনাস প্রিলোড
যেহেতু সার্ভিস ওয়ার্কার সবসময় রান করে না, তাই Manifest 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"
এক্সটেনশনের বাইরে থেকে আসা প্রসঙ্গ নির্দিষ্ট করে।
StorageChange
প্রপার্টি
-
newValue
যেকোনও ঐচ্ছিক
আইটেমের নতুন ভ্যালু, যদি নতুন ভ্যালু থাকে।
-
oldValue
যেকোনও ঐচ্ছিক
আইটেমের পুরনো ভ্যালু, যদি কোনও পুরনো ভ্যালু থাকে।
প্রপার্টি
local
local স্টোরেজ এরিয়াতে থাকা আইটেম প্রতিটি মেশিনের জন্য লোকাল।
ধরন
StorageArea ও অবজেক্ট
প্রপার্টি
-
QUOTA_BYTES
১০৪৮৫৭৬০
স্থানীয় স্টোরেজে সর্বাধিক যতটা ডেটা (বাইটে) স্টোর করা যায়, যা প্রতিটি ভ্যালুর JSON স্ট্রিংগিফিকেশন এবং প্রতিটি 'কী'-এর দৈর্ঘ্য যোগ করে পরিমাপ করা হয়। এক্সটেনশনের
unlimitedStorageঅনুমতি থাকলে এই ভ্যালু উপেক্ষা করা হবে। এই সীমা অতিক্রম করার কারণ হতে পারে এমন আপডেট অবিলম্বে ব্যর্থ হয় এবং কলব্যাক ব্যবহার করার সময়runtime.lastErrorসেট করে অথবা async/await ব্যবহার করলে একটি প্রত্যাখ্যাত প্রমিস সেট করে।
managed
managed স্টোরেজ এরিয়ার আইটেমগুলি ডোমেন অ্যাডমিনিস্ট্রেটরের কনফিগার করা এন্টারপ্রাইজ নীতি দ্বারা সেট করা হয় এবং এক্সটেনশনের জন্য শুধুমাত্র পড়ার যোগ্য; এই নেমস্পেস পরিবর্তন করার চেষ্টা করলে সমস্যা হয়। কোনও নীতি কনফিগার করার ব্যাপারে তথ্যের জন্য, স্টোরেজ এরিয়ার জন্য ম্যানিফেস্ট দেখুন।
ধরন
sync
sync স্টোরেজ এরিয়ার আইটেম Chrome Sync ব্যবহার করে সিঙ্ক করা হয়।
ধরন
StorageArea ও অবজেক্ট
প্রপার্টি
-
MAX_ITEMS
৫১২
সিঙ্ক স্টোরেজে সর্বাধিক যতগুলি আইটেম স্টোর করা যাবে। এই সীমা অতিক্রম করার কারণ হতে পারে এমন আপডেট অবিলম্বে ব্যর্থ হবে এবং কলব্যাক ব্যবহার করার সময় বা কোনও প্রমিস প্রত্যাখ্যান করা হলে
runtime.lastErrorসেট করবে। -
MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE
১০০০০০০
বন্ধ করে দেওয়া হয়েছেstorage.sync API-তে আর কোনও সাসটেইনড রাইট অপারেশন কোটা নেই।
-
MAX_WRITE_OPERATIONS_PER_HOUR
১৮০০
প্রতি ঘণ্টায় সর্বাধিক যতগুলি
set,removeবাclearঅপারেশন করা যেতে পারে। এটি প্রতি ২ সেকেন্ডে ১টি, যা স্বল্প মেয়াদে প্রতি মিনিটে বেশি লেখার সীমার চেয়ে কম।এই সীমা অতিক্রম করার কারণে আপডেটগুলি অবিলম্বে ব্যর্থ হবে এবং কলব্যাক ব্যবহার করার সময় বা কোনও প্রমিস প্রত্যাখ্যান করা হলে
runtime.lastErrorসেট করবে। -
MAX_WRITE_OPERATIONS_PER_MINUTE
১২০
প্রতি মিনিটে সর্বাধিক যতগুলি
set,removeবাclearঅপারেশন করা যেতে পারে। এটি প্রতি সেকেন্ডে ২, যা অল্প সময়ের মধ্যে প্রতি-ঘণ্টা-লেখার চেয়ে বেশি থ্রুপুট প্রদান করে।এই সীমা অতিক্রম করার কারণে আপডেটগুলি অবিলম্বে ব্যর্থ হবে এবং কলব্যাক ব্যবহার করার সময় বা কোনও প্রমিস প্রত্যাখ্যান করা হলে
runtime.lastErrorসেট করবে। -
QUOTA_BYTES
১০২৪০০
সিঙ্ক স্টোরেজে স্টোর করা যেতে পারে এমন ডেটার সর্বাধিক মোট পরিমাণ (বাইটে), প্রতিটি ভ্যালুর JSON স্ট্রিংগিফিকেশন এবং প্রতিটি 'কী'-এর দৈর্ঘ্য দ্বারা পরিমাপ করা হয়। এই সীমা অতিক্রম করার কারণে আপডেটগুলি অবিলম্বে ব্যর্থ হবে এবং কলব্যাক ব্যবহার করার সময় বা কোনও প্রমিস প্রত্যাখ্যান করা হলে
runtime.lastErrorসেট করবে। -
QUOTA_BYTES_PER_ITEM
৮১৯২
সিঙ্ক স্টোরেজে প্রতিটি আইটেমের সর্বাধিক সাইজ (বাইটে), যা এর ভ্যালুর JSON স্ট্রিংগিফিকেশন এবং এর কী-এর দৈর্ঘ্য দ্বারা পরিমাপ করা হয়। এই সীমার চেয়ে বড় আইটেম আছে এমন আপডেট সাথে সাথে ব্যর্থ হবে এবং কলব্যাক ব্যবহার করার সময় বা কোনও প্রমিস বাতিল করা হলে
runtime.lastErrorসেট করবে।
ইভেন্ট
onChanged
chrome.storage.onChanged.addListener(
callback: function,
)
এক বা একাধিক আইটেম পরিবর্তন হলে ফায়ার করা হয়।
প্যারামিটারগুলি
-
কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(changes: object, areaName: string) => void
-
বদল
অবজেক্ট
-
areaName
স্ট্রিং
-