chrome.offscreen

বিবরণ

অফস্ক্রিন ডকুমেন্ট তৈরি এবং পরিচালনা করতে offscreen API ব্যবহার করুন।

অনুমতিসমূহ

offscreen

অফস্ক্রিন API ব্যবহার করতে, এক্সটেনশন ম্যানিফেস্টে "offscreen" অনুমতি ঘোষণা করুন। উদাহরণস্বরূপ:

{
  "name": "My extension",
  ...
  "permissions": [
    "offscreen"
  ],
  ...
}

উপস্থিতি

ক্রোম ১০৯+ এমভি৩+

ধারণা এবং ব্যবহার

পরিষেবা কর্মীদের DOM অ্যাক্সেস নেই, এবং অনেক ওয়েবসাইটের কন্টেন্ট সুরক্ষা নীতি রয়েছে যা কন্টেন্ট স্ক্রিপ্টের কার্যকারিতা সীমিত করে। অফস্ক্রিন API এক্সটেনশনটিকে নতুন উইন্ডো বা ট্যাব খোলার মাধ্যমে ব্যবহারকারীর অভিজ্ঞতায় কোনও বাধা না দিয়ে একটি লুকানো নথিতে DOM API ব্যবহার করার অনুমতি দেয়। runtime API হল একমাত্র এক্সটেনশন API যা অফস্ক্রিন ডকুমেন্ট দ্বারা সমর্থিত।

অফস্ক্রিন ডকুমেন্ট হিসেবে লোড করা পৃষ্ঠাগুলি অন্যান্য ধরণের এক্সটেনশন পৃষ্ঠাগুলির থেকে আলাদাভাবে পরিচালনা করা হয়। এক্সটেনশনের অনুমতিগুলি অফস্ক্রিন ডকুমেন্টগুলিতে প্রযোজ্য, তবে এক্সটেনশন API অ্যাক্সেসের সীমাবদ্ধতা রয়েছে। উদাহরণস্বরূপ, যেহেতু chrome.runtime API হল অফস্ক্রিন ডকুমেন্ট দ্বারা সমর্থিত একমাত্র এক্সটেনশন API, তাই বার্তাপ্রেরণ অবশ্যই সেই API এর সদস্যদের ব্যবহার করে পরিচালনা করতে হবে।

অফস্ক্রিন ডকুমেন্টগুলি সাধারণ পৃষ্ঠাগুলি থেকে ভিন্নভাবে আচরণ করার অন্যান্য উপায়গুলি নিম্নরূপ:

  • একটি অফস্ক্রিন ডকুমেন্টের 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 কারণটি অডিও বাজানো ছাড়াই 30 সেকেন্ড পরে ডকুমেন্টটি বন্ধ করে দেয়। অন্যান্য সমস্ত কারণ জীবনকাল সীমা নির্ধারণ করে না।

উদাহরণ

একটি অফস্ক্রিন ডকুমেন্টের জীবনচক্র বজায় রাখুন

নিচের উদাহরণটি দেখায় কিভাবে একটি অফস্ক্রিন ডকুমেন্ট বিদ্যমান তা নিশ্চিত করতে হয়। 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: '...'
  });
});

সম্পূর্ণ উদাহরণের জন্য, GitHub-এ অফস্ক্রিন-ক্লিপবোর্ড এবং অফস্ক্রিন-ডোম ডেমো দেখুন।

Chrome 116 এর আগে: কোনও অফস্ক্রিন ডকুমেন্ট খোলা আছে কিনা তা পরীক্ষা করুন

Chrome 116-এ runtime.getContexts() যোগ করা হয়েছে। Chrome-এর পূর্ববর্তী সংস্করণগুলিতে, বিদ্যমান অফস্ক্রিন ডকুমেন্ট পরীক্ষা করতে 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

বৈশিষ্ট্য

  • যুক্তি

    স্ট্রিং

    একটি ডেভেলপার-প্রদত্ত স্ট্রিং যা পটভূমির প্রেক্ষাপটের প্রয়োজনীয়তা আরও বিশদে ব্যাখ্যা করে। ব্যবহারকারী এজেন্ট ব্যবহারকারীর কাছে প্রদর্শনের জন্য এটি ব্যবহার করতে পারে।

  • কারণ

    এক্সটেনশনটির কারণ(গুলি) হল অফস্ক্রিন ডকুমেন্ট তৈরি করা।

  • ইউআরএল

    স্ট্রিং

    ডকুমেন্টে লোড করার জন্য (আপেক্ষিক) URL।

Reason

এনাম

"পরীক্ষা"
শুধুমাত্র পরীক্ষার উদ্দেশ্যে ব্যবহৃত একটি কারণ।

"অডিও_প্লেব্যাক"
অফস্ক্রিন ডকুমেন্টটি অডিও চালানোর জন্য দায়ী তা নির্দিষ্ট করে।

"আইফ্রেম_স্ক্রিপ্টিং"
আইফ্রেমের কন্টেন্ট পরিবর্তন করার জন্য অফস্ক্রিন ডকুমেন্টকে একটি আইফ্রেম এম্বেড এবং স্ক্রিপ্ট করতে হবে তা নির্দিষ্ট করে।

"ডোম_স্ক্র্যাপিং"
নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে একটি আইফ্রেম এম্বেড করতে হবে এবং তথ্য বের করার জন্য এর DOM স্ক্র্যাপ করতে হবে।

"ব্লবস"
অফস্ক্রিন ডকুমেন্টটিকে ব্লব অবজেক্টের সাথে ইন্টারঅ্যাক্ট করতে হবে ( URL.createObjectURL() সহ) তা নির্দিষ্ট করে।

"ডোম_পার্সার"
অফস্ক্রিন ডকুমেন্টের জন্য DOMParser API ব্যবহার করা প্রয়োজন তা নির্দিষ্ট করে।

"ব্যবহারকারী_মিডিয়া"
নির্দিষ্ট করে যে অফস্ক্রিন ডকুমেন্টটিকে ব্যবহারকারী মিডিয়া (যেমন getUserMedia() ) থেকে মিডিয়া স্ট্রিমগুলির সাথে ইন্টারঅ্যাক্ট করতে হবে।

"ডিসপ্লে_মিডিয়া"
অফস্ক্রিন ডকুমেন্টকে ডিসপ্লে মিডিয়া (যেমন getDisplayMedia() ) থেকে মিডিয়া স্ট্রিমগুলির সাথে ইন্টারঅ্যাক্ট করতে হবে তা নির্দিষ্ট করে।

"ওয়েব_আরটিসি"
অফস্ক্রিন ডকুমেন্টের WebRTC API ব্যবহার করা প্রয়োজন তা নির্দিষ্ট করে।

"ক্লিপবোর্ড"
অফস্ক্রিন ডকুমেন্টটিকে ক্লিপবোর্ড API এর সাথে ইন্টারঅ্যাক্ট করতে হবে তা নির্দিষ্ট করে।

"স্থানীয়_স্টোরেজ"
অফস্ক্রিন ডকুমেন্টের localStorage এ অ্যাক্সেস প্রয়োজন তা নির্দিষ্ট করে।

"শ্রমিক"
অফস্ক্রিন ডকুমেন্টে কর্মী তৈরি করতে হবে তা নির্দিষ্ট করে।

"ব্যাটারি_স্ট্যাটাস"
অফস্ক্রিন ডকুমেন্টে navigator.getBattery ব্যবহার করা প্রয়োজন তা নির্দিষ্ট করে।

"ম্যাচ_মিডিয়া"
অফস্ক্রিন ডকুমেন্টে window.matchMedia ব্যবহার করা প্রয়োজন তা নির্দিষ্ট করে।

"ভূ-অবস্থান"
অফস্ক্রিন ডকুমেন্টে navigator.geolocation ব্যবহার করা প্রয়োজন তা নির্দিষ্ট করে।

পদ্ধতি

closeDocument()

chrome.offscreen.closeDocument(): Promise<void>

এক্সটেনশনের জন্য বর্তমানে খোলা অফস্ক্রিন ডকুমেন্টটি বন্ধ করে।

রিটার্নস

  • প্রতিশ্রুতি<অকার্যকর>

    অফস্ক্রিন ডকুমেন্ট বন্ধ হয়ে গেলে যে প্রতিশ্রুতিটি সমাধান হয়ে যায়।

createDocument()

chrome.offscreen.createDocument(
  parameters: CreateParameters,
)
: Promise<void>

এক্সটেনশনের জন্য একটি নতুন অফস্ক্রিন ডকুমেন্ট তৈরি করে।

পরামিতি

রিটার্নস

  • প্রতিশ্রুতি<অকার্যকর>

    অফস্ক্রিন ডকুমেন্ট তৈরি হয়ে গেলে এবং প্রাথমিক পৃষ্ঠা লোড সম্পন্ন হলে, যে প্রতিশ্রুতিটি সমাধান হয়ে যায়।