বর্ণনা
সার্ভিস ওয়ার্কার খুঁজে পেতে, ম্যানিফেস্টের বিবরণ জানতে এবং এক্সটেনশন লাইফসাইকেলের ইভেন্টগুলো শুনতে ও সেগুলোতে সাড়া দিতে chrome.runtime API ব্যবহার করুন। এছাড়াও, URL-এর রিলেটিভ পাথকে সম্পূর্ণ-যোগ্য URL-এ রূপান্তর করতেও আপনি এই API ব্যবহার করতে পারেন।
এই API-এর বেশিরভাগ সদস্যের কোনো অনুমতির প্রয়োজন হয় না । connectNative() , sendNativeMessage() এবং onNativeConnect জন্য এই অনুমতিটি প্রয়োজন।
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে ম্যানিফেস্টে "nativeMessaging" পারমিশনটি ঘোষণা করতে হয়:
manifest.json:
{
"name": "My extension",
...
"permissions": [
"nativeMessaging"
],
...
}
ধারণা এবং ব্যবহার
রানটাইম এপিআই এমন অনেক ক্ষেত্রকে সমর্থন করার জন্য পদ্ধতি সরবরাহ করে যা আপনার এক্সটেনশনগুলো ব্যবহার করতে পারে:
- বার্তা প্রেরণ
- আপনার এক্সটেনশনটি
connect(),onConnect,onConnectExternal,sendMessage(),onMessageএবংonMessageExternalএই মেথড ও ইভেন্টগুলো ব্যবহার করে নিজের ভেতরের বিভিন্ন কনটেক্সটের সাথে এবং অন্যান্য এক্সটেনশনের সাথেও যোগাযোগ করতে পারে। এছাড়াও, আপনার এক্সটেনশনটিconnectNative()এবংsendNativeMessage()ব্যবহার করে ব্যবহারকারীর ডিভাইসের নেটিভ অ্যাপ্লিকেশনগুলোতে মেসেজ পাঠাতে পারে।
- এক্সটেনশন এবং প্ল্যাটফর্ম মেটাডেটা অ্যাক্সেস করা
- এই পদ্ধতিগুলো আপনাকে এক্সটেনশন এবং প্ল্যাটফর্ম সম্পর্কে বেশ কিছু নির্দিষ্ট মেটাডেটা পুনরুদ্ধার করতে দেয়। এই বিভাগের পদ্ধতিগুলোর মধ্যে রয়েছে
getManifest()এবংgetPlatformInfo()। - এক্সটেনশন জীবনচক্র এবং বিকল্পগুলি পরিচালনা করা
- এই প্রোপার্টিগুলো আপনাকে এক্সটেনশনের উপর কিছু মেটা-অপারেশন করতে এবং অপশন পেজ প্রদর্শন করতে দেয়। এই ক্যাটাগরির মেথড এবং ইভেন্টগুলোর মধ্যে রয়েছে
onInstalled,onStartup,openOptionsPage(),reload(),requestUpdateCheck(), এবংsetUninstallURL()। - সহায়ক ইউটিলিটি
- এই মেথডগুলো অভ্যন্তরীণ রিসোর্স রিপ্রেজেন্টেশনকে বাহ্যিক ফরম্যাটে রূপান্তরের মতো সুবিধা প্রদান করে। এই ক্যাটাগরির মেথডগুলোর মধ্যে
getURL()অন্তর্ভুক্ত। - কিয়স্ক মোড ইউটিলিটিগুলি
- এই মেথডগুলো শুধুমাত্র ChromeOS-এ উপলব্ধ, এবং এগুলো মূলত কিয়স্ক ইমপ্লিমেন্টেশনকে সমর্থন করার জন্য বিদ্যমান। এই ক্যাটাগরির মেথডগুলোর মধ্যে
restart()এবংrestartAfterDelay()` অন্তর্ভুক্ত।
আনপ্যাক করা এক্সটেনশন আচরণ
যখন কোনো আনপ্যাক করা এক্সটেনশন রিলোড করা হয়, তখন এটিকে একটি আপডেট হিসেবে গণ্য করা হয়। এর মানে হলো, browser.runtime.onInstalled ইভেন্টটি "update" কারণসহ ফায়ার হবে। browser.runtime.reload() দিয়ে এক্সটেনশনটি রিলোড করা হলেও এটি প্রযোজ্য।
ব্যবহারের ক্ষেত্র
একটি ওয়েব পৃষ্ঠায় একটি ছবি যোগ করুন
একটি ওয়েব পেজ থেকে অন্য ডোমেইনে হোস্ট করা কোনো অ্যাসেট অ্যাক্সেস করতে হলে, সেটিকে অবশ্যই রিসোর্সটির সম্পূর্ণ URL উল্লেখ করতে হবে (যেমন <img src="https://example.com/logo.png"> )। একটি ওয়েব পেজে এক্সটেনশন অ্যাসেট অন্তর্ভুক্ত করার ক্ষেত্রেও একই নিয়ম প্রযোজ্য। দুটি পার্থক্য হলো, এক্সটেনশনের অ্যাসেটগুলোকে অবশ্যই ওয়েব অ্যাক্সেসযোগ্য রিসোর্স হিসেবে প্রকাশ করতে হবে এবং সাধারণত কন্টেন্ট স্ক্রিপ্টগুলোই এক্সটেনশন অ্যাসেটগুলো ইনজেক্ট করার দায়িত্বে থাকে।
এই উদাহরণে, এক্সটেনশনটি runtime.getURL() ব্যবহার করে একটি সম্পূর্ণ-যোগ্য URL তৈরি করার মাধ্যমে, কন্টেন্ট স্ক্রিপ্ট ইনজেক্ট করা পেজটিতে logo.png যোগ করবে। কিন্তু তার আগে, অ্যাসেটটিকে ম্যানিফেস্টে একটি ওয়েব অ্যাক্সেসযোগ্য রিসোর্স হিসেবে ঘোষণা করতে হবে।
manifest.json:
{
...
"web_accessible_resources": [
{
"resources": [ "logo.png" ],
"matches": [ "https://*/*" ]
}
],
...
}
content.js:
{ // Block used to avoid setting global variables
const img = document.createElement('img');
img.src = browser.runtime.getURL('logo.png');
document.body.append(img);
}
কন্টেন্ট স্ক্রিপ্ট থেকে সার্ভিস ওয়ার্কারে ডেটা পাঠান
প্রায়শই একটি এক্সটেনশনের কন্টেন্ট স্ক্রিপ্টগুলোর এমন ডেটার প্রয়োজন হয় যা এক্সটেনশনটিরই অন্য কোনো অংশ, যেমন সার্ভিস ওয়ার্কার, দ্বারা পরিচালিত হয়। একই ওয়েব পেজে খোলা দুটি ব্রাউজার উইন্ডোর মতোই, এই দুটি কনটেক্সট সরাসরি একে অপরের ভ্যালু অ্যাক্সেস করতে পারে না। এর পরিবর্তে, এক্সটেনশনটি এই বিভিন্ন কনটেক্সটগুলোর মধ্যে সমন্বয় সাধনের জন্য মেসেজ পাসিং ব্যবহার করতে পারে।
এই উদাহরণে, কন্টেন্ট স্ক্রিপ্টটির UI ইনিশিয়ালাইজ করার জন্য এক্সটেনশনের সার্ভিস ওয়ার্কারের কাছ থেকে কিছু ডেটার প্রয়োজন হয়। এই ডেটা পাওয়ার জন্য, এটি ডেভেলপার-সংজ্ঞায়িত get-user-data মেসেজটি সার্ভিস ওয়ার্কারের কাছে পাঠায়, এবং সার্ভিস ওয়ার্কারটি ব্যবহারকারীর তথ্যের একটি কপি দিয়ে সাড়া দেয়।
content.js:
// 1. Send a message to the service worker requesting the user's data
browser.runtime.sendMessage('get-user-data', (response) => {
// 3. Got an asynchronous response with the data from the service worker
console.log('received user data', response);
initializeUI(response);
});
service-worker.js:
// Example of a simple user data object
const user = {
username: 'demo-user'
};
browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
// 2. A page requested user data, respond with a copy of `user`
if (message === 'get-user-data') {
sendResponse(user);
}
});
আনইনস্টল করার বিষয়ে মতামত সংগ্রহ করুন
অনেক এক্সটেনশন তার ব্যবহারকারীদের আরও ভালোভাবে সেবা দেওয়ার এবং ধরে রাখার হার উন্নত করার উপায় বোঝার জন্য আনইনস্টল-পরবর্তী সমীক্ষা ব্যবহার করে। নিম্নলিখিত উদাহরণটি দেখায় কীভাবে এই কার্যকারিতাটি যুক্ত করতে হয়।
background.js:
browser.runtime.onInstalled.addListener(details => {
if (details.reason === browser.runtime.OnInstalledReason.INSTALL) {
browser.runtime.setUninstallURL('https://example.com/extension-survey');
}
});
উদাহরণ
আরও রানটাইম এপিআই উদাহরণের জন্য ম্যানিফেস্ট ভি৩ - ওয়েব অ্যাক্সেসিবল রিসোর্সেস ডেমোটি দেখুন।
প্রকারভেদ
ContextFilter
নির্দিষ্ট এক্সটেনশন কনটেক্সট মেলানোর জন্য একটি ফিল্টার। যে কনটেক্সটগুলো মিলবে, সেগুলোকে অবশ্যই নির্দিষ্ট করা সমস্ত ফিল্টারের সাথে মিলতে হবে; যে ফিল্টার নির্দিষ্ট করা নেই, তা উপলব্ধ সমস্ত কনটেক্সটের সাথে মিলে যাবে। সুতরাং, `{}` ফিল্টারটি উপলব্ধ সমস্ত কনটেক্সটের সাথে মিলে যাবে।
বৈশিষ্ট্য
- প্রসঙ্গ আইডি
স্ট্রিং[] ঐচ্ছিক
- প্রসঙ্গের প্রকার
ContextType [] ঐচ্ছিক
- ডকুমেন্ট আইডি
স্ট্রিং[] ঐচ্ছিক
- নথির উৎস
স্ট্রিং[] ঐচ্ছিক
- ডকুমেন্ট ইউআরএল
স্ট্রিং[] ঐচ্ছিক
- ফ্রেমআইডি
সংখ্যা[] ঐচ্ছিক
- ছদ্মবেশে
বুলিয়ান ঐচ্ছিক
- ট্যাবআইডি
সংখ্যা[] ঐচ্ছিক
- উইন্ডোআইডি
সংখ্যা[] ঐচ্ছিক
ContextType
এনাম
"ট্যাব" "পপআপ" "পটভূমি" "অফস্ক্রিন_ডকুমেন্ট" "সাইড_প্যানেল" "ডেভেলপার_টুলস"
ট্যাব হিসেবে প্রসঙ্গের ধরণ নির্দিষ্ট করে।
এক্সটেনশন পপআপ উইন্ডো হিসাবে কনটেক্সট টাইপ নির্দিষ্ট করে।
কনটেক্সট টাইপকে সার্ভিস ওয়ার্কার হিসেবে নির্দিষ্ট করে।
কনটেক্সট টাইপকে একটি অফস্ক্রিন ডকুমেন্ট হিসেবে নির্দিষ্ট করে।
কনটেক্সট টাইপকে সাইড প্যানেল হিসেবে নির্দিষ্ট করে।
প্রসঙ্গের ধরণ হিসেবে ডেভেলপার টুলস নির্দিষ্ট করা হয়েছে।
ExtensionContext
একটি কনটেক্সট যা এক্সটেনশন কন্টেন্ট হোস্ট করে।
বৈশিষ্ট্য
- প্রসঙ্গ আইডি
স্ট্রিং
এই প্রেক্ষাপটের জন্য একটি অনন্য শনাক্তকারী
- প্রসঙ্গের ধরণ
এটি যে ধরনের প্রেক্ষাপটের সাথে সঙ্গতিপূর্ণ।
- ডকুমেন্ট আইডি
স্ট্রিং ঐচ্ছিক
এই কনটেক্সটের সাথে সংশ্লিষ্ট ডকুমেন্টের জন্য একটি UUID, অথবা যদি এই কনটেক্সটটি কোনো ডকুমেন্টে হোস্ট করা না থাকে তবে এটি অনির্ধারিত।
- নথির উৎস
স্ট্রিং ঐচ্ছিক
এই কনটেক্সটের সাথে যুক্ত ডকুমেন্টটির উৎস, অথবা যদি কনটেক্সটটি কোনো ডকুমেন্টে হোস্ট করা না থাকে তবে তা অনির্ধারিত।
- ডকুমেন্টইউআরএল
স্ট্রিং ঐচ্ছিক
এই কনটেক্সটের সাথে সংশ্লিষ্ট ডকুমেন্টের ইউআরএল, অথবা যদি কনটেক্সটটি কোনো ডকুমেন্টে হোস্ট করা না থাকে তবে তা অনির্ধারিত থাকবে।
- ফ্রেমআইডি
সংখ্যা
এই কনটেক্সটের ফ্রেমের আইডি, অথবা -১ যদি এই কনটেক্সটটি কোনো ফ্রেমে হোস্ট করা না থাকে।
- ছদ্মবেশে
বুলিয়ান
প্রসঙ্গটি কোনো ছদ্মবেশী প্রোফাইলের সাথে যুক্ত কিনা।
- ট্যাবআইডি
সংখ্যা
এই কনটেক্সটের জন্য ট্যাবের আইডি, অথবা -১ যদি এই কনটেক্সটটি কোনো ট্যাবে হোস্ট করা না থাকে।
- উইন্ডোআইডি
সংখ্যা
এই কনটেক্সটের জন্য উইন্ডোটির আইডি, অথবা -১ যদি এই কনটেক্সটটি কোনো উইন্ডোতে হোস্ট করা না থাকে।
MessageSender
একটি অবজেক্ট, যা বার্তা বা অনুরোধ প্রেরণকারী স্ক্রিপ্ট কনটেক্সট সম্পর্কিত তথ্য ধারণ করে।
বৈশিষ্ট্য
- ডকুমেন্ট আইডি
স্ট্রিং ঐচ্ছিক
ক্রোম ১০৬+যে ডকুমেন্টটি সংযোগটি খুলেছিল তার UUID।
- ডকুমেন্ট লাইফসাইকেল
স্ট্রিং ঐচ্ছিক
ক্রোম ১০৬+পোর্টটি তৈরি করার সময় যে ডকুমেন্টটি সংযোগটি খুলেছিল, সেটি যে লাইফসাইকেলে ছিল। উল্লেখ্য যে, পোর্ট তৈরির পর থেকে ডকুমেন্টটির লাইফসাইকেল অবস্থা পরিবর্তিত হয়ে থাকতে পারে।
- ফ্রেমআইডি
সংখ্যা ঐচ্ছিক
যে ফ্রেমটি সংযোগটি খুলেছে। শীর্ষ-স্তরের ফ্রেমের জন্য ০, এবং চাইল্ড ফ্রেমের জন্য ধনাত্মক। এটি শুধুমাত্র
tabসেট করার সময়ই নির্ধারিত হবে। - আইডি
স্ট্রিং ঐচ্ছিক
যে এক্সটেনশনটি সংযোগটি খুলেছে তার আইডি, যদি থাকে।
- নেটিভ অ্যাপ্লিকেশন
স্ট্রিং ঐচ্ছিক
ক্রোম ৭৪+সংযোগটি খোলা নেটিভ অ্যাপ্লিকেশনটির নাম, যদি থাকে।
- উৎপত্তি
স্ট্রিং ঐচ্ছিক
ক্রোম ৮০+যে পেজ বা ফ্রেমটি সংযোগটি খুলেছে তার উৎস। এটি ইউআরএল প্রপার্টি থেকে ভিন্ন হতে পারে (যেমন, about:blank) অথবা অস্বচ্ছও হতে পারে (যেমন, স্যান্ডবক্সড আইফ্রেম)। যদি ইউআরএল থেকে তাৎক্ষণিকভাবে উৎসটি বিশ্বাসযোগ্য কিনা তা বোঝা না যায়, তবে এটি শনাক্ত করার জন্য এটি সহায়ক।
- ট্যাব
ট্যাব ঐচ্ছিক
যে
tabs.Tabসংযোগটি খুলেছে (যদি থাকে), সেটি। এই প্রপার্টিটি শুধুমাত্র তখনই উপস্থিত থাকবে যখন সংযোগটি কোনো ট্যাব (কন্টেন্ট স্ক্রিপ্ট সহ) থেকে খোলা হয়েছে, এবং শুধুমাত্র যদি রিসিভারটি একটি এক্সটেনশন হয়, কোনো অ্যাপ না। - tlsChannelId
স্ট্রিং ঐচ্ছিক
যে পেজ বা ফ্রেমটি সংযোগটি খুলেছে, তার TLS চ্যানেল আইডি; যদি এক্সটেনশন দ্বারা অনুরোধ করা হয় এবং তা উপলব্ধ থাকে।
- ইউআরএল
স্ট্রিং ঐচ্ছিক
যে পেজ বা ফ্রেমটি সংযোগটি খুলেছে তার ইউআরএল। যদি প্রেরক একটি আইফ্রেমে থাকে, তবে এটি আইফ্রেমের ইউআরএল হবে, যে পেজটি এটিকে হোস্ট করে তার ইউআরএল নয়।
OnInstalledReason
এই ঘটনাটি প্রেরণ করার কারণ।
এনাম
"ইনস্টল" "আপডেট" "ক্রোম_আপডেট" "shared_module_update"
ইভেন্টের কারণ হিসেবে ইনস্টলেশন নির্দিষ্ট করা হয়েছে।
ইভেন্টের কারণ হিসেবে এক্সটেনশন আপডেট নির্দিষ্ট করা হয়েছে।
ইভেন্টের কারণ হিসেবে ক্রোম আপডেট উল্লেখ করা হয়েছে।
ইভেন্টের কারণ হিসেবে একটি শেয়ার্ড মডিউলের আপডেট নির্দিষ্ট করা হয়েছে।
OnRestartRequiredReason
ইভেন্টটি পাঠানোর কারণ। অ্যাপ্লিকেশনটি নতুন সংস্করণে আপডেট হওয়ার কারণে যখন রিস্টার্টের প্রয়োজন হয়, তখন 'app_update' ব্যবহৃত হয়। ব্রাউজার/ওএস নতুন সংস্করণে আপডেট হওয়ার কারণে যখন রিস্টার্টের প্রয়োজন হয়, তখন 'os_update' ব্যবহৃত হয়। এন্টারপ্রাইজ পলিসিতে সেট করা অনুমোদিত আপটাইমের চেয়ে বেশি সময় ধরে সিস্টেম চললে 'periodic' ব্যবহৃত হয়।
এনাম
"অ্যাপ_আপডেট" "os_update" "পর্যায়ক্রমিক"
ইভেন্টের কারণ হিসেবে অ্যাপের একটি আপডেট নির্দিষ্ট করা হয়েছে।
ইভেন্টের কারণ হিসেবে অপারেটিং সিস্টেমের একটি আপডেট নির্দিষ্ট করা হয়েছে।
ইভেন্টের কারণ হিসেবে অ্যাপটির পর্যায়ক্রমিক পুনঃসূচনা নির্দিষ্ট করা হয়েছে।
PlatformArch
মেশিনটির প্রসেসর আর্কিটেকচার।
এনাম
"বাহু" "arm64" "x86-32" "x86-64" "মিপস" "mips64" "riscv64"
প্রসেসর আর্কিটেকচার হিসেবে arm নির্দিষ্ট করা হয়েছে।
প্রসেসর আর্কিটেকচার arm64 হিসেবে নির্দিষ্ট করা হয়েছে।
প্রসেসর আর্কিটেকচার x86-32 হিসেবে নির্দিষ্ট করা হয়েছে।
প্রসেসর আর্কিটেকচার x86-64 হিসেবে নির্দিষ্ট করা হয়েছে।
প্রসেসর আর্কিটেকচারকে mips হিসেবে নির্দিষ্ট করে।
প্রসেসর আর্কিটেকচার হিসেবে mips64 নির্দিষ্ট করা হয়েছে।
প্রসেসর আর্কিটেকচার হিসেবে riscv64 নির্দিষ্ট করা হয়েছে।
PlatformInfo
একটি অবজেক্ট যা বর্তমান প্ল্যাটফর্ম সম্পর্কিত তথ্য ধারণ করে।
বৈশিষ্ট্য
- খিলান
মেশিনটির প্রসেসর আর্কিটেকচার।
- nacl_arch
PlatformNaclArch ঐচ্ছিক
ক্রোম ১৪৯ থেকে বাতিল করা হয়েছেনেটিভ ক্লায়েন্ট সম্পূর্ণরূপে অপসারণ করার পর এই অ্যাট্রিবিউটটি অপ্রচলিত হয়ে গেছে।
নেটিভ ক্লায়েন্ট আর্কিটেকচার। এটি কিছু প্ল্যাটফর্মে আর্কিটেকচার থেকে ভিন্ন হতে পারে।
- ওএস
যে অপারেটিং সিস্টেমে ক্রোম চলছে।
PlatformNaclArch
Native Client সম্পূর্ণরূপে অপসারণ করার পর এই enum-টি অপ্রচলিত হয়ে গেছে।
নেটিভ ক্লায়েন্ট আর্কিটেকচার। এটি কিছু প্ল্যাটফর্মে আর্কিটেকচার থেকে ভিন্ন হতে পারে।
এনাম