chrome.offscreen

বর্ণনা

অফস্ক্রিন নথি তৈরি এবং পরিচালনা করতে offscreen API ব্যবহার করুন৷

অনুমতি

offscreen

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

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

প্রাপ্যতা

Chrome 109+ MV3+

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

পরিষেবা কর্মীদের 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 এর আগে: একটি অফস্ক্রিন নথি খোলা আছে কিনা তা পরীক্ষা করুন

runtime.getContexts() Chrome 116-এ যোগ করা হয়েছিল। 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 await matchedClients.some(client => {
        client.url.includes(chrome.runtime.id);
    });
  }
}

প্রকারভেদ

CreateParameters

বৈশিষ্ট্য

  • ন্যায্যতা

    স্ট্রিং

    একটি বিকাশকারী-প্রদত্ত স্ট্রিং যা ব্যাকগ্রাউন্ড প্রসঙ্গের প্রয়োজনীয়তা আরও বিশদে ব্যাখ্যা করে। ব্যবহারকারী এজেন্ট ব্যবহারকারীর কাছে প্রদর্শনের জন্য এটি ব্যবহার করতে পারে।

  • কারণ

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

  • url

    স্ট্রিং

    নথিতে লোড করার জন্য (আপেক্ষিক) URL।

Reason

এনাম

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

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

"IFRAME_SCRIPTING"
আইফ্রেমের বিষয়বস্তু পরিবর্তন করার জন্য অফস্ক্রিন নথিতে একটি iframe এম্বেড এবং স্ক্রিপ্ট করতে হবে তা নির্দিষ্ট করে৷

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

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

"DOM_PARSER"
নির্দিষ্ট করে যে অফস্ক্রিন নথির জন্য DOMParser API ব্যবহার করতে হবে।

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

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

"WEB_RTC"
নির্দিষ্ট করে যে অফস্ক্রিন নথিতে WebRTC API ব্যবহার করতে হবে।

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

"LOCAL_STORAGE"
নির্দিষ্ট করে যে অফস্ক্রিন নথির স্থানীয় স্টোরেজ অ্যাক্সেসের প্রয়োজন।

"শ্রমিক"
সুনির্দিষ্ট করে যে অফস্ক্রিন নথিতে কর্মীদের জন্ম দিতে হবে।

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

"MATCH_media"
নির্দিষ্ট করে যে অফস্ক্রিন নথির window.matchMedia ব্যবহার করতে হবে।

"ভৌগলিক অবস্থান"
নির্দিষ্ট করে যে অফস্ক্রিন নথির navigator.geolocation ব্যবহার করতে হবে।

পদ্ধতি

closeDocument()

প্রতিশ্রুতি
chrome.offscreen.closeDocument(
  callback?: function,
)

এক্সটেনশনের জন্য বর্তমানে খোলা অফস্ক্রীন নথি বন্ধ করে৷

পরামিতি

  • কলব্যাক

    ফাংশন ঐচ্ছিক

    callback প্যারামিটারটি এর মতো দেখাচ্ছে:

    () => void

রিটার্নস

  • প্রতিশ্রুতি <void>

    প্রতিশ্রুতিগুলি ম্যানিফেস্ট V3 এবং পরবর্তীতে সমর্থিত, তবে পশ্চাদগামী সামঞ্জস্যের জন্য কলব্যাক প্রদান করা হয়। আপনি একই ফাংশন কলে উভয় ব্যবহার করতে পারবেন না। প্রতিশ্রুতিটি একই ধরণের সাথে সমাধান করে যা কলব্যাকে পাস করা হয়।

createDocument()

প্রতিশ্রুতি
chrome.offscreen.createDocument(
  parameters: CreateParameters,
  callback?: function,
)

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

পরামিতি

  • অফস্ক্রিন নথি তৈরি করার পরামিতিগুলি বর্ণনা করে৷

  • কলব্যাক

    ফাংশন ঐচ্ছিক

    callback প্যারামিটারটি এর মতো দেখাচ্ছে:

    () => void

রিটার্নস

  • প্রতিশ্রুতি <void>

    প্রতিশ্রুতিগুলি ম্যানিফেস্ট V3 এবং পরবর্তীতে সমর্থিত, তবে পশ্চাদগামী সামঞ্জস্যের জন্য কলব্যাক প্রদান করা হয়। আপনি একই ফাংশন কলে উভয় ব্যবহার করতে পারবেন না। প্রতিশ্রুতিটি একই ধরণের সাথে সমাধান করে যা কলব্যাকে পাস করা হয়।