ম্যানিফেস্ট V3-এ অফস্ক্রিন ডকুমেন্ট

ইয়ান স্ট্যানিয়ন
Ian Stanion

ব্যাকগ্রাউন্ড পৃষ্ঠাগুলি থেকে এক্সটেনশন পরিষেবা কর্মীদের রূপান্তরের ক্ষেত্রে কার্যকারিতা প্রতিস্থাপন করতে, বিকাশকারীরা chrome.offscreen API ব্যবহার করতে পারে এবং Chrome 109 থেকে শুরু করে ম্যানিফেস্ট অনুমতি ব্যবহার করতে পারে৷ এই অনুমতির অনুরোধ করা অফ-স্ক্রীন নথি তৈরির জন্য DOM API ব্যবহার করার জন্য বিভ্রান্তিকরভাবে নতুন খোলার অনুমতি দেয়৷ উইন্ডোজ বা ট্যাব যা ব্যবহারকারীর অভিজ্ঞতাকে ব্যাহত করে। chrome.offscreen API এখন chrome এক্সটেনশনে উপলব্ধ।

Chromium-এ, ম্যানিফেস্ট V3 এক্সটেনশনগুলি পরিষেবা কর্মী-ভিত্তিক, কিন্তু পরিষেবা কর্মীরা একই API এবং প্রক্রিয়াগুলির জন্য সমর্থন প্রদান করে না যা সম্পূর্ণ নথি-ভিত্তিক পৃষ্ঠাগুলি (যার মধ্যে ব্যাকগ্রাউন্ড এবং ইভেন্ট পৃষ্ঠাগুলি অন্তর্ভুক্ত) করে৷ উপরন্তু, ওয়েব পৃষ্ঠাগুলিতে DOM APIগুলি অ্যাক্সেস করার জন্য সামগ্রী স্ক্রিপ্টগুলি ব্যবহার করে পৃষ্ঠা থেকে পৃষ্ঠার ভিত্তিতে বিভিন্ন বিষয়বস্তু সুরক্ষা নীতির করুণায় এক্সটেনশন ছেড়ে যায়৷ এটি সমাধানে সহায়তা করার জন্য, আমরা একটি ডেডিকেটেড API এর মাধ্যমে রানটাইমে ম্যানিফেস্ট V3 এক্সটেনশনগুলিকে ন্যূনতম, স্কোপড, এবং অপেক্ষাকৃত অননুমোদিত অফস্ক্রিন নথিগুলি খোলার অনুমতি দিয়ে DOM- সম্পর্কিত বৈশিষ্ট্য এবং APIগুলিকে সমর্থন করার জন্য অফস্ক্রিন নথির প্রবর্তন করছি৷

বৈশিষ্ট্য তথ্য

যেহেতু অফস্ক্রিন ডকুমেন্টগুলি বিশেষভাবে এমন ব্যবহারের ক্ষেত্রে তৈরি করা হয়েছে যেগুলি পরিষেবা কর্মীদের সমর্থিত নয় (উদাহরণস্বরূপ, অডিও প্লেব্যাক), এই পৃষ্ঠার জীবনকাল এবং এটি যে অনুমতিগুলি দেওয়া হবে তা এক্সটেনশন পরিষেবা কর্মীদের থেকে আলাদা৷ ম্যানিফেস্ট V2-এর ইভেন্ট পৃষ্ঠাগুলির মতো পৃষ্ঠাটির একটি আজীবন ব্যবস্থা থাকবে, এতে এটি ক্রিয়া সম্পাদন করা বন্ধ করলে এটি ভেঙে ফেলা হবে। উপরন্তু, ব্যবহারকারী এজেন্ট নির্দিষ্ট উদ্দেশ্যের জন্য নির্দিষ্ট জীবনকালের উপর আরও বিধিনিষেধ আরোপ করতে পারে। অফস্ক্রিন নথিগুলিকে API থেকে ফাঁক পূরণ করার জন্য ডিজাইন করা হয়েছে যেগুলি শুধুমাত্র DOM APIগুলিতে অ্যাক্সেসযোগ্য; এই কারণে, এক্সটেনশন API-কে এই প্রসঙ্গে সরাসরি প্রকাশ করার প্রয়োজন নেই। "ব্যাকগ্রাউন্ড পৃষ্ঠা প্রতিস্থাপন" হিসাবে এইগুলি ব্যবহার করে এক্সটেনশনের সম্ভাবনা কমাতে, শুধুমাত্র chrome.runtime মেসেজিং APIগুলি অফস্ক্রিন নথিতে উন্মুক্ত করা হয়৷ (ডেভেলপাররা তাদের পরিষেবা কর্মীর মাধ্যমে অফস্ক্রিন নথিটিকে ক্লায়েন্ট হিসাবে দাবি করে ওয়েব মেসেজিং ব্যবহার করতে পারে।) কারণ কিছু ব্যবহারের ক্ষেত্রে - বিশেষ করে, সাইট স্ক্র্যাপিং - ক্রস-অরিজিন ফ্রেমে অ্যাক্সেসের প্রয়োজন হয়, আমরা এই নথিগুলিকে ক্রস-অরিজিন ফ্রেমগুলি এম্বেড করার অনুমতি দিই। এক্সটেনশন পৃষ্ঠাগুলি আজকে একই নিয়ম অনুসরণ করে। অফস্ক্রিন নথিতে, এক্সটেনশন দ্বারা নির্দিষ্ট বিষয়বস্তু স্ক্রিপ্টগুলি যে কোনও সাধারণ ওয়েব পৃষ্ঠার মতো যে কোনও প্রয়োজনীয় বিষয়বস্তু স্ক্র্যাপ করার জন্য এই ফ্রেমে চলতে সক্ষম।

কারণ, এবং একটি উদ্দেশ্য প্রয়োজন

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

ভবিষ্যতে মধ্যে

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

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

অতিরিক্তভাবে, পরিষেবা কর্মীতে DOM কার্যকারিতা এবং API যোগ করা হলে, পরিষেবা কর্মীর বর্তমান অবস্থা এবং অফস্ক্রিন নথিগুলি ব্যবহার করার কারণগুলির উপর নির্ভর করে একটি নথি তৈরি করার কারণগুলির তালিকা যোগ করা হবে বা হ্রাস করা হবে৷

উপসংহার

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

আনস্প্ল্যাশে কারি শিয়ার ছবি