বর্ণনা
অফস্ক্রিন ডকুমেন্ট তৈরি ও পরিচালনা করতে offscreen এপিআই ব্যবহার করুন।
অনুমতি
offscreen অফস্ক্রিন এপিআই ব্যবহার করতে, এক্সটেনশন ম্যানিফেস্টে "offscreen" পারমিশনটি ঘোষণা করুন। উদাহরণস্বরূপ:
{
"name": "My extension",
...
"permissions": [
"offscreen"
],
...
}
প্রাপ্যতা
ধারণা এবং ব্যবহার
সার্ভিস ওয়ার্কারদের DOM অ্যাক্সেস নেই, এবং অনেক ওয়েবসাইটে কন্টেন্ট সিকিউরিটি পলিসি থাকে যা কন্টেন্ট স্ক্রিপ্টের কার্যকারিতা সীমিত করে। অফস্ক্রিন এপিআই এক্সটেনশনটিকে নতুন উইন্ডো বা ট্যাব খুলে ব্যবহারকারীর অভিজ্ঞতায় বাধা না দিয়েই একটি লুকানো ডকুমেন্টে DOM এপিআই ব্যবহার করার সুযোগ দেয়। runtime এপিআই হলো একমাত্র এক্সটেনশন এপিআই যা অফস্ক্রিন ডকুমেন্ট দ্বারা সমর্থিত।
অফস্ক্রিন ডকুমেন্ট হিসেবে লোড হওয়া পেজগুলো অন্যান্য ধরনের এক্সটেনশন পেজ থেকে ভিন্নভাবে পরিচালিত হয়। এক্সটেনশনের অনুমতিগুলো অফস্ক্রিন ডকুমেন্টেও বহাল থাকে, তবে এক্সটেনশন এপিআই (API) অ্যাক্সেসের উপর সীমাবদ্ধতা থাকে। উদাহরণস্বরূপ, যেহেতু অফস্ক্রিন ডকুমেন্টগুলো শুধুমাত্র chrome.runtime এপিআই সমর্থন করে, তাই মেসেজিং অবশ্যই সেই এপিআই-এর মেম্বার ব্যবহার করে পরিচালনা করতে হবে।
অফস্ক্রিন ডকুমেন্টগুলো সাধারণ পেজ থেকে নিম্নলিখিত অন্যান্য উপায়েও ভিন্নভাবে আচরণ করে:
- অফস্ক্রিন ডকুমেন্টের URL অবশ্যই একটি স্ট্যাটিক HTML ফাইল হতে হবে, যার সাথে একটি এক্সটেনশন যুক্ত থাকবে।
- স্ক্রিনের বাইরে থাকা ডকুমেন্টে ফোকাস করা যায় না।
- একটি অফস্ক্রিন ডকুমেন্ট হলো
windowএর একটি ইনস্ট্যান্স, কিন্তু এরopenerপ্রপার্টির মান সর্বদাnullহয়। - যদিও একটি এক্সটেনশন প্যাকেজে একাধিক অফস্ক্রিন ডকুমেন্ট থাকতে পারে, একটি ইনস্টল করা এক্সটেনশনে একবারে কেবল একটিই খোলা থাকতে পারে। যদি এক্সটেনশনটি একটি সক্রিয় ইনকগনিটো প্রোফাইলের সাথে স্প্লিট মোডে চলে, তবে সাধারণ এবং ইনকগনিটো প্রোফাইল প্রতিটিতে একটি করে অফস্ক্রিন ডকুমেন্ট থাকতে পারে।
একটি অফস্ক্রিন ডকুমেন্ট তৈরি ও বন্ধ করতে chrome.offscreen.createDocument() এবং chrome.offscreen.closeDocument() ব্যবহার করুন। createDocument() ফাংশনটির জন্য ডকুমেন্টের url , একটি কারণ এবং একটি ব্যাখ্যা প্রয়োজন হয়।
chrome.offscreen.createDocument({
url: 'off_screen.html',
reasons: ['CLIPBOARD'],
justification: 'reason for needing the document',
});
কারণ
বৈধ কারণগুলোর তালিকার জন্য, ' কারণসমূহ' বিভাগটি দেখুন। ডকুমেন্টের জীবনকাল নির্ধারণ করার জন্য ডকুমেন্ট তৈরির সময় কারণগুলো সেট করা হয়। AUDIO_PLAYBACK কারণটি সেট করলে ৩০ সেকেন্ড ধরে কোনো অডিও না চললে ডকুমেন্টটি বন্ধ হয়ে যাবে। অন্য কোনো কারণ জীবনকালের সীমা নির্ধারণ করে না।
উদাহরণ
অফস্ক্রিন ডকুমেন্টের জীবনচক্র বজায় রাখুন
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি অফস্ক্রিন ডকুমেন্টের অস্তিত্ব নিশ্চিত করা যায়। setupOffscreenDocument() ফাংশনটি একটি বিদ্যমান অফস্ক্রিন ডকুমেন্ট খুঁজে বের করার জন্য runtime.getContexts() কে কল করে, অথবা ডকুমেন্টটি আগে থেকে বিদ্যমান না থাকলে তা তৈরি করে।
let creating; // A global promise to avoid concurrency issues
async function setupOffscreenDocument(path) {
// Check all windows controlled by the service worker to see if one
// of them is the offscreen document with the given path
const offscreenUrl = chrome.runtime.getURL(path);
const existingContexts = await chrome.runtime.getContexts({
contextTypes: ['OFFSCREEN_DOCUMENT'],
documentUrls: [offscreenUrl]
});
if (existingContexts.length > 0) {
return;
}
// create offscreen document
if (creating) {
await creating;
} else {
creating = chrome.offscreen.createDocument({
url: path,
reasons: ['CLIPBOARD'],
justification: 'reason for needing the document',
});
await creating;
creating = null;
}
}
অফস্ক্রিন ডকুমেন্টে বার্তা পাঠানোর আগে, ডকুমেন্টটির অস্তিত্ব নিশ্চিত করতে setupOffscreenDocument() কল করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।
chrome.action.onClicked.addListener(async () => {
await setupOffscreenDocument('off_screen.html');
// Send message to offscreen document
chrome.runtime.sendMessage({
type: '...',
target: 'offscreen',
data: '...'
});
});
সম্পূর্ণ উদাহরণের জন্য, গিটহাবে থাকা অফস্ক্রিন-ক্লিপবোর্ড এবং অফস্ক্রিন-ডম ডেমোগুলো দেখুন।
ক্রোম ১১৬-এর আগে: স্ক্রিনের বাইরে কোনো ডকুমেন্ট খোলা আছে কিনা তা পরীক্ষা করুন
runtime.getContexts() ক্রোম ১১৬-এ যোগ করা হয়েছিল। ক্রোমের পূর্ববর্তী সংস্করণগুলিতে, স্ক্রিনের বাইরে থাকা কোনো ডকুমেন্ট আছে কিনা তা পরীক্ষা করতে clients.matchAll() ব্যবহার করুন:
async function hasOffscreenDocument() {
if ('getContexts' in chrome.runtime) {
const contexts = await chrome.runtime.getContexts({
contextTypes: ['OFFSCREEN_DOCUMENT'],
documentUrls: [OFFSCREEN_DOCUMENT_PATH]
});
return Boolean(contexts.length);
} else {
const matchedClients = await clients.matchAll();
return matchedClients.some(client => {
return client.url.includes(chrome.runtime.id);
});
}
}
প্রকারভেদ
CreateParameters
বৈশিষ্ট্য
- ন্যায্যতা
স্ট্রিং
ডেভেলপার কর্তৃক প্রদত্ত একটি স্ট্রিং, যা ব্যাকগ্রাউন্ড কনটেক্সটের প্রয়োজনীয়তা আরও বিশদভাবে ব্যাখ্যা করে। ইউজার এজেন্ট ব্যবহারকারীকে দেখানোর জন্য এটি ব্যবহার করতে পারে।
- কারণগুলি
কারণ []
যে কারণে এক্সটেনশনটি অফস্ক্রিন ডকুমেন্ট তৈরি করছে।
- ইউআরএল
স্ট্রিং
ডকুমেন্টটি লোড করার জন্য (আপেক্ষিক) ইউআরএল।
Reason
এনাম
"পরীক্ষা" "অডিও_প্লেব্যাক" "আইফ্রেম_স্ক্রিপ্টিং" "ডোম_স্ক্র্যাপিং" "ব্লবস" "DOM_PARSER" "ব্যবহারকারী_মিডিয়া" "ডিসপ্লে_মিডিয়া" "WEB_RTC" "ক্লিপবোর্ড" "স্থানীয় স্টোরেজ" "শ্রমিক" "ব্যাটারি_স্ট্যাটাস" "ম্যাচ_মিডিয়া" "ভূ-অবস্থান"
শুধুমাত্র পরীক্ষার উদ্দেশ্যে ব্যবহৃত একটি কারণ।
নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটি অডিও চালানোর দায়িত্বে থাকবে।
এটি নির্দিষ্ট করে যে, আইফ্রেমের বিষয়বস্তু পরিবর্তন করার জন্য অফস্ক্রিন ডকুমেন্টটিকে একটি আইফ্রেম এমবেড ও স্ক্রিপ্ট করতে হবে।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিতে একটি আইফ্রেম এমবেড করতে হবে এবং তথ্য আহরণের জন্য এর DOM স্ক্র্যাপ করতে হবে।
নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে Blob অবজেক্টের ( URL.createObjectURL() সহ) সাথে ইন্টারঅ্যাক্ট করতে হবে।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিতে DOMParser API ব্যবহার করতে হবে।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে ইউজার মিডিয়া থেকে মিডিয়া স্ট্রিমের সাথে ইন্টারঅ্যাক্ট করতে হবে (যেমন getUserMedia() )।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে ডিসপ্লে মিডিয়া থেকে মিডিয়া স্ট্রিমের সাথে ইন্টারঅ্যাক্ট করতে হবে (যেমন getDisplayMedia() )।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিতে WebRTC API ব্যবহার করতে হবে।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে ক্লিপবোর্ড এপিআই (Clipboard API)- এর সাথে যোগাযোগ করতে হবে।
নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটির localStorage- এ অ্যাক্সেস প্রয়োজন।
নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে ওয়ার্কার তৈরি করতে হবে।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে navigator.getBattery ব্যবহার করতে হবে।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিতে window.matchMedia ব্যবহার করতে হবে।
এটি নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিতে navigator.geolocation ব্যবহার করতে হবে।
পদ্ধতি
closeDocument()
chrome.offscreen.closeDocument(): Promise<void>
এক্সটেনশনটির জন্য বর্তমানে খোলা অফস্ক্রিন ডকুমেন্টটি বন্ধ করে।
ফেরত
প্রতিশ্রুতি<শূন্য>
অফস্ক্রিন ডকুমেন্টটি বন্ধ হয়ে গেলে যে প্রমিসটি কার্যকর হয়।
createDocument()
chrome.offscreen.createDocument(
parameters: CreateParameters,
): Promise<void>
এক্সটেনশনটির জন্য একটি নতুন অফস্ক্রিন ডকুমেন্ট তৈরি করে।
প্যারামিটার
- প্যারামিটার
যে অফস্ক্রিন ডকুমেন্টটি তৈরি করতে হবে, তার বর্ণনাকারী প্যারামিটারগুলো।
ফেরত
প্রতিশ্রুতি<শূন্য>
এই প্রমিসটি তখন রিজলভ হয়, যখন অফস্ক্রিন ডকুমেন্টটি তৈরি হয় এবং এর প্রাথমিক পেজ লোড সম্পন্ন হয়।
hasDocument()
chrome.offscreen.hasDocument(): Promise<boolean>
এক্সটেনশনটিতে কোনো সক্রিয় ডকুমেন্ট আছে কিনা তা নির্ধারণ করে।
ফেরত
প্রতিশ্রুতি<বুলিয়ান>
এমন একটি প্রমিস যা এক্সটেনশনটির কোনো সক্রিয় অফস্ক্রিন ডকুমেন্ট আছে কি না, সেই ফলাফল প্রদানের মাধ্যমে রিজলভ হয়।