বর্ণনা
ব্যবহারকারীর ডেটা সংরক্ষণ, পুনরুদ্ধার এবং এর পরিবর্তনগুলি ট্র্যাক করতে chrome.storage API ব্যবহার করুন।
অনুমতি
storage স্টোরেজ এপিআই ব্যবহার করতে, এক্সটেনশন ম্যানিফেস্টে "storage" পারমিশনটি ঘোষণা করুন। উদাহরণস্বরূপ:
{
"name": "My extension",
...
"permissions": [
"storage"
],
...
}
উদাহরণ
নিম্নলিখিত নমুনাগুলি local , sync এবং session স্টোরেজ এলাকাগুলি প্রদর্শন করে:
উদাহরণ (স্থানীয়)
await chrome.storage.local.set({ key: value });
console.log("Value is set");
const result = await chrome.storage.local.get(["key"]);
console.log("Value is " + result.key);
উদাহরণ (সিঙ্ক)
await chrome.storage.sync.set({ key: value });
console.log("Value is set");
const result = await chrome.storage.sync.get(["key"]);
console.log("Value is " + result.key);
উদাহরণ (অধিবেশন)
await chrome.storage.session.set({ key: value });
console.log("Value is set");
const result = await chrome.storage.session.get(["key"]);
console.log("Value is " + result.key);
স্টোরেজ এপিআই-এর অন্যান্য ডেমো দেখতে, নিচের যেকোনো স্যাম্পল অন্বেষণ করুন:
ধারণা এবং ব্যবহার
স্টোরেজ এপিআই ব্যবহারকারীর ডেটা এবং স্টেট সংরক্ষণ করার জন্য একটি এক্সটেনশন-নির্দিষ্ট উপায় প্রদান করে। এটি ওয়েব প্ল্যাটফর্মের স্টোরেজ এপিআইগুলোর ( ইনডেক্সডডিবি এবং স্টোরেজ ) মতোই, কিন্তু এক্সটেনশনগুলোর স্টোরেজের চাহিদা মেটানোর জন্য ডিজাইন করা হয়েছে। এর কয়েকটি প্রধান বৈশিষ্ট্য নিচে দেওয়া হলো:
- এক্সটেনশন সার্ভিস ওয়ার্কার এবং কন্টেন্ট স্ক্রিপ্ট সহ সকল এক্সটেনশন কনটেক্সট স্টোরেজ এপিআই-তে অ্যাক্সেস পায়।
- JSON সিরিয়ালাইজেবল মানগুলো অবজেক্ট প্রপার্টি হিসেবে সংরক্ষিত থাকে।
- স্টোরেজ এপিআইটি বাল্ক রিড এবং রাইট অপারেশনের ক্ষেত্রে অ্যাসিঙ্ক্রোনাস।
- ব্যবহারকারী ক্যাশে ও ব্রাউজিং হিস্ট্রি মুছে ফেললেও ডেটা থেকে যায়।
- স্প্লিট ইনকগনিটো ব্যবহার করলেও সংরক্ষিত সেটিংস অপরিবর্তিত থাকে।
- এন্টারপ্রাইজ পলিসিগুলির জন্য একটি স্বতন্ত্র পঠন-যোগ্য পরিচালিত স্টোরেজ এলাকা অন্তর্ভুক্ত।
এক্সটেনশনগুলো কি ওয়েব স্টোরেজ এপিআই ব্যবহার করতে পারে?
যদিও এক্সটেনশনগুলি কিছু ক্ষেত্রে (পপআপ এবং অন্যান্য HTML পেজ) Storage ইন্টারফেস (যা window.localStorage থেকে অ্যাক্সেসযোগ্য) ব্যবহার করতে পারে, আমরা নিম্নলিখিত কারণগুলির জন্য এটি সুপারিশ করি না:
- এক্সটেনশন সার্ভিস কর্মীরা ওয়েব স্টোরেজ এপিআই ব্যবহার করতে পারে না।
- কন্টেন্ট স্ক্রিপ্টগুলো হোস্ট পেজের সাথে স্টোরেজ শেয়ার করে।
- ওয়েব স্টোরেজ এপিআই ব্যবহার করে সংরক্ষিত ডেটা ব্যবহারকারী তার ব্রাউজিং হিস্ট্রি মুছে ফেললে হারিয়ে যায়।
একটি সার্ভিস ওয়ার্কার থেকে ওয়েব স্টোরেজ এপিআই থেকে এক্সটেনশন স্টোরেজ এপিআই-তে ডেটা স্থানান্তর করতে:
- একটি অফস্ক্রিন ডকুমেন্ট এইচটিএমএল পেজ এবং স্ক্রিপ্ট ফাইল প্রস্তুত করুন। স্ক্রিপ্ট ফাইলটিতে একটি রূপান্তর রুটিন এবং একটি
onMessageহ্যান্ডলার থাকা উচিত। - এক্সটেনশন সার্ভিস ওয়ার্কারে আপনার ডেটার জন্য
chrome.storageচেক করুন। - যদি আপনার ডেটা খুঁজে না পাওয়া যায়, তাহলে
createDocument()কল করুন। - ফেরত আসা প্রমিসটি রিজলভ হওয়ার পর, কনভার্সন রুটিন শুরু করতে
sendMessage()কল করুন। - অফস্ক্রিন ডকুমেন্টের
onMessageহ্যান্ডলারের ভিতরে, রূপান্তর রুটিনটি কল করুন।
এক্সটেনশনগুলিতে ওয়েব স্টোরেজ এপিআই কীভাবে কাজ করে, তারও কিছু সূক্ষ্ম বিষয় রয়েছে। স্টোরেজ এবং কুকিজ নিবন্ধে আরও জানুন।
স্টোরেজ এবং থ্রটলিং সীমা
স্টোরেজ এপিআই ব্যবহারের সীমাবদ্ধতা রয়েছে:
- ডেটা সংরক্ষণের জন্য পারফরম্যান্স খরচ হয়, এবং এপিআই-তে স্টোরেজ কোটা অন্তর্ভুক্ত থাকে। আপনি যে ডেটা সংরক্ষণ করতে চান, তার পরিকল্পনা করুন, যাতে আপনার স্টোরেজ স্পেস বজায় থাকে।
- স্টোরেজ সম্পন্ন হতে সময় লাগতে পারে। এই সময়টির কথা মাথায় রেখে আপনার কোড গঠন করুন।
স্টোরেজ এলাকার সীমাবদ্ধতা এবং তা অতিক্রম করলে কী হয়, সে সম্পর্কে বিস্তারিত জানতে sync , local এবং session কোটা তথ্য দেখুন।
স্টোরেজ এলাকা
স্টোরেজ এপিআই নিম্নলিখিত স্টোরেজ এলাকাগুলিতে বিভক্ত:
স্থানীয়
ডেটা স্থানীয়ভাবে সংরক্ষিত থাকে এবং এক্সটেনশনটি সরিয়ে ফেললে তা মুছে যায়। স্টোরেজের সীমা হলো ১০ মেগাবাইট (ক্রোম ১১৩ এবং তার আগের সংস্করণগুলোতে ৫ মেগাবাইট), তবে "unlimitedStorage" পারমিশনের জন্য অনুরোধ করে এটি বাড়ানো যেতে পারে। বেশি পরিমাণে ডেটা সংরক্ষণের জন্য আমরা storage.local ব্যবহার করার পরামর্শ দিই। ডিফল্টরূপে, এটি কন্টেন্ট স্ক্রিপ্টগুলোর জন্য উন্মুক্ত থাকে, কিন্তু chrome.storage.local.setAccessLevel() কল করে এই আচরণ পরিবর্তন করা যায়।
পরিচালিত
পলিসি দ্বারা ইনস্টল করা এক্সটেনশনগুলির জন্য ম্যানেজড স্টোরেজ শুধুমাত্র পঠনযোগ্য (read-only) থাকে। এটি সিস্টেম অ্যাডমিনিস্ট্রেটরদের দ্বারা, একটি ডেভেলপার-সংজ্ঞায়িত স্কিমা এবং এন্টারপ্রাইজ পলিসি ব্যবহার করে পরিচালিত হয়। পলিসিগুলো অপশনের মতোই, কিন্তু এগুলো ব্যবহারকারীর পরিবর্তে একজন সিস্টেম অ্যাডমিনিস্ট্রেটর দ্বারা কনফিগার করা হয়। এর ফলে একটি প্রতিষ্ঠানের সকল ব্যবহারকারীর জন্য এক্সটেনশনটি আগে থেকেই কনফিগার করা যায়।
ডিফল্টরূপে, storage.managed কন্টেন্ট স্ক্রিপ্টের জন্য উন্মুক্ত থাকে, কিন্তু chrome.storage.managed.setAccessLevel() কল করে এই আচরণ পরিবর্তন করা যায়। পলিসি সম্পর্কে তথ্যের জন্য, অ্যাডমিনিস্ট্রেটরদের জন্য ডকুমেন্টেশন দেখুন। managed স্টোরেজ এরিয়া সম্পর্কে আরও জানতে, স্টোরেজ এরিয়ার জন্য ম্যানিফেস্ট দেখুন।
অধিবেশন
একটি এক্সটেনশন লোড থাকা অবস্থায় সেশন স্টোরেজ মেমরিতে ডেটা ধরে রাখে। এক্সটেনশনটি নিষ্ক্রিয় করা হলে, পুনরায় লোড করা হলে, আপডেট করা হলে এবং ব্রাউজার পুনরায় চালু হলে এই স্টোরেজ খালি হয়ে যায়। ডিফল্টরূপে, এটি কন্টেন্ট স্ক্রিপ্টের কাছে উন্মুক্ত থাকে না, কিন্তু chrome.storage.session.setAccessLevel() কল করে এই আচরণ পরিবর্তন করা যেতে পারে। স্টোরেজের সীমা হলো ১০ মেগাবাইট (ক্রোম ১১১ এবং তার আগের সংস্করণগুলোতে ১ মেগাবাইট)।
সার্ভিস ওয়ার্কারদের জন্য আমরা যে কয়েকটি ইন্টারফেসের সুপারিশ করি , storage.session হলো তার মধ্যে একটি।
সিঙ্ক
যদি ব্যবহারকারী সিঙ্কিং চালু করেন, তাহলে তিনি যে সমস্ত ক্রোম ব্রাউজারে লগ ইন করে আছেন, সেগুলোর সবকটিতেই ডেটা সিঙ্ক হয়। যদি এটি বন্ধ করা থাকে, তবে এটি storage.local মতো কাজ করে। ব্রাউজার অফলাইনে থাকলে ক্রোম ডেটা স্থানীয়ভাবে সংরক্ষণ করে এবং পুনরায় অনলাইন হলে সিঙ্কিং আবার শুরু করে। কোটার সীমাবদ্ধতা হলো প্রায় ১০০ কিলোবাইট, অর্থাৎ প্রতিটি আইটেমের জন্য ৮ কিলোবাইট।
সিঙ্ক করা ব্রাউজারগুলিতে ব্যবহারকারীর সেটিংস সংরক্ষণ করতে আমরা storage.sync ব্যবহার করার পরামর্শ দিই। আপনি যদি সংবেদনশীল ব্যবহারকারীর ডেটা নিয়ে কাজ করেন, তবে এর পরিবর্তে storage.session ব্যবহার করুন। ডিফল্টরূপে, storage.sync কন্টেন্ট স্ক্রিপ্টগুলিতে উন্মুক্ত থাকে, কিন্তু chrome.storage.sync.setAccessLevel() কল করে এই আচরণ পরিবর্তন করা যেতে পারে।
পদ্ধতি এবং ঘটনা
সকল স্টোরেজ এরিয়া StorageArea ইন্টারফেসটি প্রয়োগ করে।
get()
get() মেথডটি আপনাকে একটি StorageArea থেকে এক বা একাধিক কী (key) রিড করতে দেয়।
getBytesInUse()
getBytesInUse() মেথডটি আপনাকে একটি StorageArea দ্বারা ব্যবহৃত কোটা দেখতে দেয়।
getKeys()
getKeys() মেথডটি আপনাকে একটি StorageArea তে সংরক্ষিত সমস্ত কী (key) পেতে সাহায্য করে।
অপসারণ()
` remove() ` মেথডটি ব্যবহার করে আপনি StorageArea থেকে কোনো আইটেম মুছে ফেলতে পারেন।
সেট()
set() মেথডটি ব্যবহার করে আপনি StorageArea তে কোনো আইটেম সেট করতে পারেন।
setAccessLevel()
setAccessLevel() মেথডটি আপনাকে একটি StorageArea তে অ্যাক্সেস নিয়ন্ত্রণ করতে দেয়।
clear()
` clear() ` মেথডটি ব্যবহার করে আপনি একটি StorageArea থেকে সমস্ত ডেটা মুছে ফেলতে পারেন।
onChanged
onChanged ইভেন্টটি আপনাকে একটি StorageArea এর পরিবর্তনসমূহ নিরীক্ষণ করতে দেয়।
ব্যবহারের ক্ষেত্র
নিম্নলিখিত বিভাগগুলিতে স্টোরেজ এপিআই-এর সাধারণ ব্যবহারগুলি তুলে ধরা হয়েছে।
স্টোরেজ আপডেটে সাড়া দিন
স্টোরেজে করা পরিবর্তনগুলো ট্র্যাক করতে, এর 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 এক্সটেনশনগুলোকে কখনও কখনও তাদের ইভেন্ট হ্যান্ডলারগুলো কার্যকর করার আগে স্টোরেজ থেকে অ্যাসিঙ্ক্রোনাসভাবে ডেটা লোড করতে হয়। এটি করার জন্য, নিম্নলিখিত কোড স্নিপেটটিতে একটি async 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);
});
ডেভটুলস
আপনি DevTools-এ API ব্যবহার করে সংরক্ষিত ডেটা দেখতে ও সম্পাদনা করতে পারেন। আরও জানতে, DevTools ডকুমেন্টেশনের 'View and edit extension storage' পৃষ্ঠাটি দেখুন।
প্রকারভেদ
AccessLevel
স্টোরেজ এলাকার প্রবেশাধিকার স্তর।
এনাম
"বিশ্বস্ত_প্রসঙ্গ" বিশ্বস্ত এবং অবিশ্বস্ত প্রেক্ষাপট
এক্সটেনশনটি থেকেই উদ্ভূত প্রেক্ষাপটগুলো নির্দিষ্ট করে।
এক্সটেনশনের বাইরে থেকে উদ্ভূত কনটেক্সটগুলো নির্দিষ্ট করে।
StorageChange
বৈশিষ্ট্য
- নতুন মূল্য
যেকোনো ঐচ্ছিক
আইটেমটির নতুন মান, যদি কোনো নতুন মান থাকে।
- পুরানো মূল্য
যেকোনো ঐচ্ছিক
জিনিসটির পুরোনো মূল্য, যদি কোনো পুরোনো মূল্য থেকে থাকে।
বৈশিষ্ট্য
local
local স্টোরেজ এলাকার আইটেমগুলো প্রতিটি মেশিনের জন্য স্থানীয়।
প্রকার
স্টোরেজ এলাকা এবং অবজেক্ট
বৈশিষ্ট্য
- কোটা_বাইট
১০৪৮৫৭৬০
লোকাল স্টোরেজে সংরক্ষণযোগ্য ডেটার সর্বোচ্চ পরিমাণ (বাইটে), যা প্রতিটি ভ্যালুর JSON স্ট্রিংফিকেশন এবং প্রতিটি কী-এর দৈর্ঘ্য দ্বারা পরিমাপ করা হয়। এক্সটেনশনটির যদি
unlimitedStorageপারমিশন থাকে, তবে এই মানটি উপেক্ষা করা হবে। যে আপডেটগুলোর কারণে এই সীমা অতিক্রম করবে, সেগুলো অবিলম্বে ব্যর্থ হবে এবং কলব্যাক ব্যবহার করলেruntime.lastErrorসেট করবে, অথবা async/await ব্যবহার করলে একটি প্রত্যাখ্যাত Promise সেট করবে।
managed
managed স্টোরেজ এরিয়ার আইটেমগুলো ডোমেইন অ্যাডমিনিস্ট্রেটর দ্বারা কনফিগার করা একটি এন্টারপ্রাইজ পলিসি দ্বারা নির্ধারিত হয় এবং এক্সটেনশনটির জন্য এগুলো শুধুমাত্র পঠনযোগ্য (read-only); এই নেমস্পেসটি পরিবর্তন করার চেষ্টা করলে একটি ত্রুটি দেখা দেয়। পলিসি কনফিগার করার তথ্যের জন্য, স্টোরেজ এরিয়ার ম্যানিফেস্ট দেখুন।
প্রকার
session
session স্টোরেজ এলাকার আইটেমগুলো মেমরিতে সংরক্ষিত থাকে এবং ডিস্কে স্থায়ীভাবে জমা হয় না।
প্রকার
স্টোরেজ এলাকা এবং অবজেক্ট
বৈশিষ্ট্য
- কোটা_বাইট
১০৪৮৫৭৬০
প্রতিটি ভ্যালু এবং কী-এর ডাইনামিকভাবে বরাদ্দকৃত মেমরি ব্যবহারের পরিমাণ অনুমান করে, মেমরিতে সংরক্ষণযোগ্য ডেটার সর্বোচ্চ পরিমাণ (বাইটে) নির্ধারণ করা হয়। যে আপডেটগুলোর কারণে এই সীমা অতিক্রম করবে, সেগুলো কলব্যাক ব্যবহার করার সময় বা কোনো প্রমিজ প্রত্যাখ্যাত হলে তাৎক্ষণিকভাবে ব্যর্থ হয় এবং
runtime.lastErrorসেট করে।
sync
sync স্টোরেজ এলাকার আইটেমগুলো ক্রোম সিঙ্ক ব্যবহার করে সিঙ্ক করা হয়।
প্রকার
স্টোরেজ এলাকা এবং অবজেক্ট
বৈশিষ্ট্য
- সর্বোচ্চ আইটেম
৫১২
সিঙ্ক স্টোরেজে সর্বাধিক যতগুলো আইটেম সংরক্ষণ করা যায়। যে আপডেটগুলোর কারণে এই সীমা অতিক্রম করবে, সেগুলো কলব্যাক ব্যবহার করার সময় বা কোনো প্রমিস প্রত্যাখ্যাত হলে তাৎক্ষণিকভাবে ব্যর্থ হবে এবং
runtime.lastErrorসেট করবে। - প্রতি মিনিটে সর্বোচ্চ অবিচ্ছিন্ন লেখার অপারেশন
১০০০০০০
অপ্রচলিতstorage.sync API-এর এখন আর কোনো ধারাবাহিক রাইট অপারেশন কোটা নেই।
- প্রতি ঘন্টায় সর্বোচ্চ লেখার অপারেশন
১৮০০
প্রতি ঘন্টায় সর্বাধিক যতগুলো
set,removeবাclearঅপারেশন করা যেতে পারে। এটি প্রতি ২ সেকেন্ডে ১ বার, যা স্বল্পমেয়াদী উচ্চতর 'রাইট-পার-মিনিট' সীমার চেয়ে কম।যেসব আপডেটের কারণে এই সীমা অতিক্রম করবে, সেগুলো কলব্যাক ব্যবহার করার সময় বা কোনো প্রমিস প্রত্যাখ্যাত হলে তাৎক্ষণিকভাবে ব্যর্থ হয় এবং
runtime.lastErrorসেট করে। - প্রতি মিনিটে সর্বোচ্চ লেখার অপারেশন
১২০
প্রতি মিনিটে সর্বাধিক যতগুলো
set,removeবাclearঅপারেশন করা যেতে পারে। এটি প্রতি সেকেন্ডে ২টি, যা স্বল্প সময়ের মধ্যে প্রতি ঘন্টায় লেখার হারের চেয়ে বেশি থ্রুপুট প্রদান করে।যেসব আপডেটের কারণে এই সীমা অতিক্রম করবে, সেগুলো কলব্যাক ব্যবহার করার সময় বা কোনো প্রমিস প্রত্যাখ্যাত হলে তাৎক্ষণিকভাবে ব্যর্থ হয় এবং
runtime.lastErrorসেট করে। - কোটা_বাইট
১০২৪০০
সিঙ্ক স্টোরেজে সংরক্ষণযোগ্য ডেটার সর্বোচ্চ মোট পরিমাণ (বাইটে), যা প্রতিটি ভ্যালুর JSON স্ট্রিংফিকেশন এবং প্রতিটি কী-এর দৈর্ঘ্য দ্বারা পরিমাপ করা হয়। যে আপডেটগুলির কারণে এই সীমা অতিক্রম করবে, সেগুলি অবিলম্বে ব্যর্থ হয় এবং একটি কলব্যাক ব্যবহার করার সময় বা যখন একটি প্রমিস প্রত্যাখ্যাত হয় তখন
runtime.lastErrorসেট করে। - প্রতি আইটেমে কোটা_বাইট
৮১৯২
সিঙ্ক স্টোরেজে থাকা প্রতিটি আইটেমের সর্বোচ্চ আকার (বাইটে), যা তার মানের JSON স্ট্রিংফিকেশন এবং কী-এর দৈর্ঘ্যের যোগফল দ্বারা পরিমাপ করা হয়। এই সীমার চেয়ে বড় আইটেমযুক্ত আপডেটগুলি অবিলম্বে ব্যর্থ হবে এবং একটি কলব্যাক ব্যবহার করার সময় বা যখন একটি প্রমিস প্রত্যাখ্যাত হয় তখন
runtime.lastErrorসেট করবে।
ইভেন্টগুলি
onChanged
chrome.storage.onChanged.addListener(
callback: function,
)
এক বা একাধিক আইটেম পরিবর্তিত হলে এটি সক্রিয় হয়।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(changes: object, areaName: string) => void
- পরিবর্তন
বস্তু
- এলাকার নাম
স্ট্রিং