সেবা কর্মীদের ইভেন্ট

এক্সটেনশন সার্ভিস ওয়ার্কাররা স্ট্যান্ডার্ড সার্ভিস ওয়ার্কার ইভেন্ট এবং এক্সটেনশন এপিআই- এর অনেক ইভেন্ট উভয়ই সমর্থন করে। এই বিভাগে কী কী উপলব্ধ আছে তা বর্ণনা করা হয়েছে এবং সেগুলি ব্যবহারের জন্য কিছু পরামর্শ দেওয়া হয়েছে।

সম্প্রসারণ ইভেন্ট ঘোষণা করুন

সার্ভিস ওয়ার্কারের ইভেন্ট হ্যান্ডলারগুলোকে গ্লোবাল স্কোপে ডিক্লেয়ার করতে হয়, অর্থাৎ এগুলো স্ক্রিপ্টের টপ লেভেলে থাকা উচিত এবং কোনো ফাংশনের ভেতরে নেস্টেড থাকা উচিত নয়। এটি নিশ্চিত করে যে স্ক্রিপ্ট প্রথমবার চলার সময় হ্যান্ডলারগুলো সিনক্রোনাসভাবে রেজিস্টার হয়, যা ক্রোমকে সার্ভিস ওয়ার্কারটি চালু হওয়ার সাথে সাথেই ইভেন্ট ডিসপ্যাচ করতে সক্ষম করে। উদাহরণস্বরূপ:

পরামর্শ দেওয়া হয় না
browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
  browser.action.onClicked.addListener(handleActionClick);
});
আরও ভালো
browser.action.onClicked.addListener(handleActionClick);

browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
});

সাধারণ ঘটনা

এক্সটেনশন সার্ভিস ওয়ার্কার নির্দিষ্ট এপিআই-তে ইভেন্ট সমর্থন করে। নিচে কয়েকটি সাধারণ এপিআই বর্ণনা করা হলো। উল্লেখ্য যে, এই এপিআইগুলোর কয়েকটি ব্যবহার করার জন্য অনুমতির প্রয়োজন হয় এবং অন্যগুলোতে এমন ইভেন্ট, মেথড বা প্রপার্টি থাকতে পারে যা ক্রোমের সব সংস্করণে উপলব্ধ নয়। বিস্তারিত জানতে, লিঙ্ক করা এপিআই ডকুমেন্টেশন দেখুন, বিশেষ করে যে ইভেন্ট, মেথড বা প্রপার্টিগুলো আপনি ব্যবহার করতে চান।

browser.action
আপনার এক্সটেনশনের টুলবার আইকনের সাথে ব্যবহারকারীর কোনো ইন্টারঅ্যাকশনের প্রতিক্রিয়ায় এটি সক্রিয় হয়, সেই কাজটি কোনো নির্দিষ্ট পৃষ্ঠা (ট্যাব)-এর জন্য হোক বা সম্পূর্ণ এক্সটেনশনটির জন্যই হোক।
browser.management
এক্সটেনশন ইনস্টলেশন, আনইনস্টলেশন, সক্রিয়করণ এবং নিষ্ক্রিয়করণ সম্পর্কিত ইভেন্টসমূহ প্রদান করে।
browser.notifications
এক্সটেনশন দ্বারা তৈরি সিস্টেম নোটিফিকেশনের সাথে ব্যবহারকারীর মিথস্ক্রিয়া সম্পর্কিত ইভেন্টগুলো প্রদান করে।
browser.permissions
ব্যবহারকারী কখন এক্সটেনশনের অনুমতি প্রদান বা প্রত্যাহার করেন তা নির্দেশ করে।
browser.runtime
এক্সটেনশনের জীবনচক্র সম্পর্কিত ইভেন্ট, এক্সটেনশনের অন্যান্য অংশ থেকে পাঠানো বার্তা এবং কোনো উপলব্ধ এক্সটেনশন বা ক্রোম আপডেটের বিজ্ঞপ্তি প্রদান করে।
browser.storage.onChanged
যখনই কোনো StorageArea অবজেক্ট খালি করা হয় অথবা কোনো কী-এর মান পরিবর্তন বা সেট করা হয়, তখন এটি সক্রিয় হয়। উল্লেখ্য যে, প্রতিটি StorageArea ইনস্ট্যান্সের নিজস্ব onChanged ইভেন্ট থাকে।
browser.webNavigation
উড্ডয়নকালীন নেভিগেশন অনুরোধগুলোর অবস্থা সম্পর্কে তথ্য প্রদান করে।

ফিল্টার

ইভেন্টগুলোকে নির্দিষ্ট ব্যবহারের ক্ষেত্রে সীমাবদ্ধ করতে, বা অপ্রয়োজনীয় ইভেন্ট কল বাদ দিতে, ইভেন্ট ফিল্টার সমর্থন করে এমন এপিআই (API) ব্যবহার করুন। উদাহরণস্বরূপ, এমন একটি এক্সটেনশনের কথা ভাবুন যা ব্যবহারকারী কখন একটি নির্দিষ্ট ওয়েবসাইটে নেভিগেট করে তা শনাক্ত করার জন্য tabs.onUpdated ইভেন্টটি শোনে। এই ইভেন্টটি প্রতিটি ট্যাবের প্রতিটি নেভিগেশনে কল করা হবে। এর পরিবর্তে, একটি ফিল্টার সহ webNavigation.onCompleted ব্যবহার করুন। উদাহরণস্বরূপ:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

browser.webNavigation.onCompleted.addListener(() => {
  console.info("The user has loaded my favorite website!");
}, filter);

ওয়েব পরিষেবা কর্মী ইভেন্ট

সম্প্রসারণ সেবাকর্মীরা অন্যত্র বর্ণিত জীবনচক্রের ঘটনাগুলোর চেয়েও বেশি সহায়তা প্রদান করেন।

ServiceWorkerGlobal.fetch

এক্সটেনশন প্যাকেজ থেকে কিছু পুনরুদ্ধার করা হলে অথবা কোনো এক্সটেনশন বা পপআপ স্ক্রিপ্ট থেকে fetch() এবং XMLHttpRequest() কল করা হলে এটি ফায়ার হয়। (কন্টেন্ট স্ক্রিপ্ট থেকে করা কলগুলো সার্ভিস ওয়ার্কার fetch হ্যান্ডলার দ্বারা ইন্টারসেপ্ট করা হয় না।) পরবর্তী ক্ষেত্রে, আপনি যে পেজগুলো ফেচ করতে চান সেগুলোর URL, manifest.json ফাইলের "host_permissions" কী-তে যোগ করতে হবে।

ServiceWorkerGlobal.message

এক্সটেনশন মেসেজিং পাসিং- এর পাশাপাশি সার্ভিস ওয়ার্কার মেসেজ পাসিংও উপলব্ধ, কিন্তু এই দুটি সিস্টেম পরস্পর সামঞ্জস্যপূর্ণ নয়। এর মানে হলো, sendMessage() ব্যবহার করে পাঠানো মেসেজ (যা বিভিন্ন এক্সটেনশন API-তে উপলব্ধ) সার্ভিস ওয়ার্কার মেসেজ হ্যান্ডলার দ্বারা গৃহীত হয় না। একইভাবে, postMessage() ব্যবহার করে পাঠানো মেসেজও এক্সটেনশন মেসেজ হ্যান্ডলার দ্বারা গৃহীত হয় না। উভয় প্রকার মেসেজ হ্যান্ডলার—অর্থাৎ ServiceWorkerGlobal.message এবং browser.runtime.onMessage উভয়ই—এক্সটেনশন সার্ভিস ওয়ার্কারে সমর্থিত।

সার্ভিস ওয়ার্কার মেসেজিং ব্যবহারের কোনো নির্দিষ্ট কারণ না থাকলে আপনার এক্সটেনশন মেসেজিং ব্যবহার করাই শ্রেয়।

,

এক্সটেনশন সার্ভিস ওয়ার্কাররা স্ট্যান্ডার্ড সার্ভিস ওয়ার্কার ইভেন্ট এবং এক্সটেনশন এপিআই- এর অনেক ইভেন্ট উভয়ই সমর্থন করে। এই বিভাগে কী কী উপলব্ধ আছে তা বর্ণনা করা হয়েছে এবং সেগুলি ব্যবহারের জন্য কিছু পরামর্শ দেওয়া হয়েছে।

সম্প্রসারণ ইভেন্ট ঘোষণা করুন

সার্ভিস ওয়ার্কারের ইভেন্ট হ্যান্ডলারগুলোকে গ্লোবাল স্কোপে ডিক্লেয়ার করতে হয়, অর্থাৎ এগুলো স্ক্রিপ্টের টপ লেভেলে থাকা উচিত এবং কোনো ফাংশনের ভেতরে নেস্টেড থাকা উচিত নয়। এটি নিশ্চিত করে যে স্ক্রিপ্ট প্রথমবার চলার সময় হ্যান্ডলারগুলো সিনক্রোনাসভাবে রেজিস্টার হয়, যা ক্রোমকে সার্ভিস ওয়ার্কারটি চালু হওয়ার সাথে সাথেই ইভেন্ট ডিসপ্যাচ করতে সক্ষম করে। উদাহরণস্বরূপ:

পরামর্শ দেওয়া হয় না
browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
  browser.action.onClicked.addListener(handleActionClick);
});
আরও ভালো
browser.action.onClicked.addListener(handleActionClick);

browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
});

সাধারণ ঘটনা

এক্সটেনশন সার্ভিস ওয়ার্কার নির্দিষ্ট এপিআই-তে ইভেন্ট সমর্থন করে। নিচে কয়েকটি সাধারণ এপিআই বর্ণনা করা হলো। উল্লেখ্য যে, এই এপিআইগুলোর কয়েকটি ব্যবহার করার জন্য অনুমতির প্রয়োজন হয় এবং অন্যগুলোতে এমন ইভেন্ট, মেথড বা প্রপার্টি থাকতে পারে যা ক্রোমের সব সংস্করণে উপলব্ধ নয়। বিস্তারিত জানতে, লিঙ্ক করা এপিআই ডকুমেন্টেশন দেখুন, বিশেষ করে যে ইভেন্ট, মেথড বা প্রপার্টিগুলো আপনি ব্যবহার করতে চান।

browser.action
আপনার এক্সটেনশনের টুলবার আইকনের সাথে ব্যবহারকারীর কোনো ইন্টারঅ্যাকশনের প্রতিক্রিয়ায় এটি সক্রিয় হয়, সেই কাজটি কোনো নির্দিষ্ট পৃষ্ঠা (ট্যাব)-এর জন্য হোক বা সম্পূর্ণ এক্সটেনশনটির জন্যই হোক।
browser.management
এক্সটেনশন ইনস্টলেশন, আনইনস্টলেশন, সক্রিয়করণ এবং নিষ্ক্রিয়করণ সম্পর্কিত ইভেন্টসমূহ প্রদান করে।
browser.notifications
এক্সটেনশন দ্বারা তৈরি সিস্টেম নোটিফিকেশনের সাথে ব্যবহারকারীর মিথস্ক্রিয়া সম্পর্কিত ইভেন্টগুলো প্রদান করে।
browser.permissions
ব্যবহারকারী কখন এক্সটেনশনের অনুমতি প্রদান বা প্রত্যাহার করেন তা নির্দেশ করে।
browser.runtime
এক্সটেনশনের জীবনচক্র সম্পর্কিত ইভেন্ট, এক্সটেনশনের অন্যান্য অংশ থেকে পাঠানো বার্তা এবং কোনো উপলব্ধ এক্সটেনশন বা ক্রোম আপডেটের বিজ্ঞপ্তি প্রদান করে।
browser.storage.onChanged
যখনই কোনো StorageArea অবজেক্ট খালি করা হয় অথবা কোনো কী-এর মান পরিবর্তন বা সেট করা হয়, তখন এটি সক্রিয় হয়। উল্লেখ্য যে, প্রতিটি StorageArea ইনস্ট্যান্সের নিজস্ব onChanged ইভেন্ট থাকে।
browser.webNavigation
উড্ডয়নকালীন নেভিগেশন অনুরোধগুলোর অবস্থা সম্পর্কে তথ্য প্রদান করে।

ফিল্টার

ইভেন্টগুলোকে নির্দিষ্ট ব্যবহারের ক্ষেত্রে সীমাবদ্ধ করতে, বা অপ্রয়োজনীয় ইভেন্ট কল বাদ দিতে, ইভেন্ট ফিল্টার সমর্থন করে এমন এপিআই (API) ব্যবহার করুন। উদাহরণস্বরূপ, এমন একটি এক্সটেনশনের কথা ভাবুন যা ব্যবহারকারী কখন একটি নির্দিষ্ট ওয়েবসাইটে নেভিগেট করে তা শনাক্ত করার জন্য tabs.onUpdated ইভেন্টটি শোনে। এই ইভেন্টটি প্রতিটি ট্যাবের প্রতিটি নেভিগেশনে কল করা হবে। এর পরিবর্তে, একটি ফিল্টার সহ webNavigation.onCompleted ব্যবহার করুন। উদাহরণস্বরূপ:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

browser.webNavigation.onCompleted.addListener(() => {
  console.info("The user has loaded my favorite website!");
}, filter);

ওয়েব পরিষেবা কর্মী ইভেন্ট

সম্প্রসারণ সেবাকর্মীরা অন্যত্র বর্ণিত জীবনচক্রের ঘটনাগুলোর চেয়েও বেশি সহায়তা প্রদান করেন।

ServiceWorkerGlobal.fetch

এক্সটেনশন প্যাকেজ থেকে কিছু পুনরুদ্ধার করা হলে অথবা কোনো এক্সটেনশন বা পপআপ স্ক্রিপ্ট থেকে fetch() এবং XMLHttpRequest() কল করা হলে এটি ফায়ার হয়। (কন্টেন্ট স্ক্রিপ্ট থেকে করা কলগুলো সার্ভিস ওয়ার্কার fetch হ্যান্ডলার দ্বারা ইন্টারসেপ্ট করা হয় না।) পরবর্তী ক্ষেত্রে, আপনি যে পেজগুলো ফেচ করতে চান সেগুলোর URL, manifest.json ফাইলের "host_permissions" কী-তে যোগ করতে হবে।

ServiceWorkerGlobal.message

এক্সটেনশন মেসেজিং পাসিং- এর পাশাপাশি সার্ভিস ওয়ার্কার মেসেজ পাসিংও উপলব্ধ, কিন্তু এই দুটি সিস্টেম পরস্পর সামঞ্জস্যপূর্ণ নয়। এর মানে হলো, sendMessage() ব্যবহার করে পাঠানো মেসেজ (যা বিভিন্ন এক্সটেনশন API-তে উপলব্ধ) সার্ভিস ওয়ার্কার মেসেজ হ্যান্ডলার দ্বারা গৃহীত হয় না। একইভাবে, postMessage() ব্যবহার করে পাঠানো মেসেজও এক্সটেনশন মেসেজ হ্যান্ডলার দ্বারা গৃহীত হয় না। উভয় প্রকার মেসেজ হ্যান্ডলার—অর্থাৎ ServiceWorkerGlobal.message এবং browser.runtime.onMessage উভয়ই—এক্সটেনশন সার্ভিস ওয়ার্কারে সমর্থিত।

সার্ভিস ওয়ার্কার মেসেজিং ব্যবহারের কোনো নির্দিষ্ট কারণ না থাকলে আপনার এক্সটেনশন মেসেজিং ব্যবহার করাই শ্রেয়।

,

এক্সটেনশন সার্ভিস ওয়ার্কাররা স্ট্যান্ডার্ড সার্ভিস ওয়ার্কার ইভেন্ট এবং এক্সটেনশন এপিআই- এর অনেক ইভেন্ট উভয়ই সমর্থন করে। এই বিভাগে কী কী উপলব্ধ আছে তা বর্ণনা করা হয়েছে এবং সেগুলি ব্যবহারের জন্য কিছু পরামর্শ দেওয়া হয়েছে।

সম্প্রসারণ ইভেন্ট ঘোষণা করুন

সার্ভিস ওয়ার্কারের ইভেন্ট হ্যান্ডলারগুলোকে গ্লোবাল স্কোপে ডিক্লেয়ার করতে হয়, অর্থাৎ এগুলো স্ক্রিপ্টের টপ লেভেলে থাকা উচিত এবং কোনো ফাংশনের ভেতরে নেস্টেড থাকা উচিত নয়। এটি নিশ্চিত করে যে স্ক্রিপ্ট প্রথমবার চলার সময় হ্যান্ডলারগুলো সিনক্রোনাসভাবে রেজিস্টার হয়, যা ক্রোমকে সার্ভিস ওয়ার্কারটি চালু হওয়ার সাথে সাথেই ইভেন্ট ডিসপ্যাচ করতে সক্ষম করে। উদাহরণস্বরূপ:

পরামর্শ দেওয়া হয় না
browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
  browser.action.onClicked.addListener(handleActionClick);
});
আরও ভালো
browser.action.onClicked.addListener(handleActionClick);

browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
});

সাধারণ ঘটনা

এক্সটেনশন সার্ভিস ওয়ার্কার নির্দিষ্ট এপিআই-তে ইভেন্ট সমর্থন করে। নিচে কয়েকটি সাধারণ এপিআই বর্ণনা করা হলো। উল্লেখ্য যে, এই এপিআইগুলোর কয়েকটি ব্যবহার করার জন্য অনুমতির প্রয়োজন হয় এবং অন্যগুলোতে এমন ইভেন্ট, মেথড বা প্রপার্টি থাকতে পারে যা ক্রোমের সব সংস্করণে উপলব্ধ নয়। বিস্তারিত জানতে, লিঙ্ক করা এপিআই ডকুমেন্টেশন দেখুন, বিশেষ করে যে ইভেন্ট, মেথড বা প্রপার্টিগুলো আপনি ব্যবহার করতে চান।

browser.action
আপনার এক্সটেনশনের টুলবার আইকনের সাথে ব্যবহারকারীর কোনো ইন্টারঅ্যাকশনের প্রতিক্রিয়ায় এটি সক্রিয় হয়, সেই কাজটি কোনো নির্দিষ্ট পৃষ্ঠা (ট্যাব)-এর জন্য হোক বা সম্পূর্ণ এক্সটেনশনটির জন্যই হোক।
browser.management
এক্সটেনশন ইনস্টলেশন, আনইনস্টলেশন, সক্রিয়করণ এবং নিষ্ক্রিয়করণ সম্পর্কিত ইভেন্টসমূহ প্রদান করে।
browser.notifications
এক্সটেনশন দ্বারা তৈরি সিস্টেম নোটিফিকেশনের সাথে ব্যবহারকারীর মিথস্ক্রিয়া সম্পর্কিত ইভেন্টগুলো প্রদান করে।
browser.permissions
ব্যবহারকারী কখন এক্সটেনশনের অনুমতি প্রদান বা প্রত্যাহার করেন তা নির্দেশ করে।
browser.runtime
এক্সটেনশনের জীবনচক্র সম্পর্কিত ইভেন্ট, এক্সটেনশনের অন্যান্য অংশ থেকে পাঠানো বার্তা এবং কোনো উপলব্ধ এক্সটেনশন বা ক্রোম আপডেটের বিজ্ঞপ্তি প্রদান করে।
browser.storage.onChanged
যখনই কোনো StorageArea অবজেক্ট খালি করা হয় অথবা কোনো কী-এর মান পরিবর্তন বা সেট করা হয়, তখন এটি সক্রিয় হয়। উল্লেখ্য যে, প্রতিটি StorageArea ইনস্ট্যান্সের নিজস্ব onChanged ইভেন্ট থাকে।
browser.webNavigation
উড্ডয়নকালীন নেভিগেশন অনুরোধগুলোর অবস্থা সম্পর্কে তথ্য প্রদান করে।

ফিল্টার

ইভেন্টগুলোকে নির্দিষ্ট ব্যবহারের ক্ষেত্রে সীমাবদ্ধ করতে, বা অপ্রয়োজনীয় ইভেন্ট কল বাদ দিতে, ইভেন্ট ফিল্টার সমর্থন করে এমন এপিআই (API) ব্যবহার করুন। উদাহরণস্বরূপ, এমন একটি এক্সটেনশনের কথা ভাবুন যা ব্যবহারকারী কখন একটি নির্দিষ্ট ওয়েবসাইটে নেভিগেট করে তা শনাক্ত করার জন্য tabs.onUpdated ইভেন্টটি শোনে। এই ইভেন্টটি প্রতিটি ট্যাবের প্রতিটি নেভিগেশনে কল করা হবে। এর পরিবর্তে, একটি ফিল্টার সহ webNavigation.onCompleted ব্যবহার করুন। উদাহরণস্বরূপ:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

browser.webNavigation.onCompleted.addListener(() => {
  console.info("The user has loaded my favorite website!");
}, filter);

ওয়েব পরিষেবা কর্মী ইভেন্ট

সম্প্রসারণ সেবাকর্মীরা অন্যত্র বর্ণিত জীবনচক্রের ঘটনাগুলোর চেয়েও বেশি সহায়তা প্রদান করেন।

ServiceWorkerGlobal.fetch

এক্সটেনশন প্যাকেজ থেকে কিছু পুনরুদ্ধার করা হলে অথবা কোনো এক্সটেনশন বা পপআপ স্ক্রিপ্ট থেকে fetch() এবং XMLHttpRequest() কল করা হলে এটি ফায়ার হয়। (কন্টেন্ট স্ক্রিপ্ট থেকে করা কলগুলো সার্ভিস ওয়ার্কার fetch হ্যান্ডলার দ্বারা ইন্টারসেপ্ট করা হয় না।) পরবর্তী ক্ষেত্রে, আপনি যে পেজগুলো ফেচ করতে চান সেগুলোর URL, manifest.json ফাইলের "host_permissions" কী-তে যোগ করতে হবে।

ServiceWorkerGlobal.message

এক্সটেনশন মেসেজিং পাসিং- এর পাশাপাশি সার্ভিস ওয়ার্কার মেসেজ পাসিংও উপলব্ধ, কিন্তু এই দুটি সিস্টেম পরস্পর সামঞ্জস্যপূর্ণ নয়। এর মানে হলো, sendMessage() ব্যবহার করে পাঠানো মেসেজ (যা বিভিন্ন এক্সটেনশন API-তে উপলব্ধ) সার্ভিস ওয়ার্কার মেসেজ হ্যান্ডলার দ্বারা গৃহীত হয় না। একইভাবে, postMessage() ব্যবহার করে পাঠানো মেসেজও এক্সটেনশন মেসেজ হ্যান্ডলার দ্বারা গৃহীত হয় না। উভয় প্রকার মেসেজ হ্যান্ডলার—অর্থাৎ ServiceWorkerGlobal.message এবং browser.runtime.onMessage উভয়ই—এক্সটেনশন সার্ভিস ওয়ার্কারে সমর্থিত।

সার্ভিস ওয়ার্কার মেসেজিং ব্যবহারের কোনো নির্দিষ্ট কারণ না থাকলে আপনার এক্সটেনশন মেসেজিং ব্যবহার করাই শ্রেয়।