হোস্ট অনুমতির জন্য ব্যবহারকারী নিয়ন্ত্রণ: ট্রানজিশন গাইড

সারসংক্ষেপ

কি পরিবর্তন হচ্ছে?

Chrome 70 থেকে শুরু করে, ব্যবহারকারীদের কাছে এক্সটেনশন হোস্ট অ্যাক্সেসকে সাইটগুলির একটি কাস্টম তালিকায় সীমাবদ্ধ করার ক্ষমতা আছে, বা বর্তমান পৃষ্ঠায় অ্যাক্সেস পেতে একটি ক্লিকের প্রয়োজনের জন্য এক্সটেনশনগুলি কনফিগার করার ক্ষমতা রয়েছে৷

কোন APIগুলি প্রভাবিত হয়?

এই পরিবর্তনটি আপনার এক্সটেনশনের ম্যানিফেস্টের পাশাপাশি সামগ্রী স্ক্রিপ্টে নির্দিষ্ট হোস্ট অনুমতি দ্বারা প্রভাবিত যেকোন API-কে প্রভাবিত করে৷ যে APIগুলি হোস্টের অনুমতিগুলির প্রয়োজন তার মধ্যে রয়েছে webRequest , কুকিজ , tabs.executeScript() এবং tabs.insertCSS() , এবং ক্রস-অরিজিন অনুরোধগুলি সম্পাদন করা, যেমন একটি XMLHTTPRequest বা fetch() API এর মাধ্যমে৷

অ্যাক্সেস সীমাবদ্ধ

কিভাবে ব্যবহারকারী অ্যাক্সেস সীমাবদ্ধ করতে পারেন?

ব্যবহারকারীরা আপনার এক্সটেনশনটিকে ক্লিকে, নির্দিষ্ট সাইটের সেটে বা অনুরোধ করা সমস্ত সাইটে চালানোর অনুমতি দিতে পারেন৷ এই বিকল্পগুলি chrome://extensions পৃষ্ঠার পাশাপাশি এক্সটেনশন প্রসঙ্গ মেনুতে ব্যবহারকারীদের কাছে উপস্থাপন করা হয়।

প্রসঙ্গ মেনুর একটি স্ক্রিনশট রানটাইম হোস্টের অনুমতিগুলির জন্য নিয়ন্ত্রণ করে, যার মধ্যে ক্লিকে, একটি নির্দিষ্ট সাইটে বা সমস্ত সাইটে এক্সটেনশন চালানোর বিকল্প রয়েছে।

কি হবে যদি একজন ব্যবহারকারী আমার এক্সটেনশন "ক্লিকে" চালানোর জন্য বেছে নেয়?

এক্সটেনশনটি মূলত এমন আচরণ করে যেন এটি সক্রিয় ট্যাব অনুমতি ব্যবহার করে। এক্সটেনশনটি যেকোন হোস্টে অস্থায়ী অ্যাক্সেস মঞ্জুর করা হয় যেটিতে ব্যবহারকারী এক্সটেনশনটি ক্লিক করেন, যদি সেই হোস্টটি এক্সটেনশন দ্বারা অনুরোধ করা হয় (এবং এটি একটি সীমাবদ্ধ সাইট নয়, যেমন chrome://settings)৷ ক্লিকে চালানোর জন্য সেট করা হলে, Chrome আপনার এক্সটেনশনটিকে একটি বৃত্ত এবং ড্রপ শ্যাডো দিয়ে ব্যাজ করে (নীচে দেখুন) নির্দেশ করে যে এটি একটি নির্দিষ্ট সাইটে অ্যাক্সেসের অনুরোধ করছে।

ব্যাজিং Chrome-এর একটি স্ক্রিনশট টুলবারে এক্সটেনশন আইকনে যোগ করে

কোন ব্যবহারকারী নির্দিষ্ট সাইটে আমার এক্সটেনশন চালানোর জন্য বেছে নিলে কি হবে?

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

যদি একজন ব্যবহারকারী সব সাইটে আমার এক্সটেনশন চালানোর জন্য বেছে নেয় তাহলে কি হবে?

এক্সটেনশনটি স্বয়ংক্রিয়ভাবে ম্যানিফেস্টে অনুরোধ করা যেকোনো সাইট অ্যাক্সেস করতে পারে।

API আচরণ

ওয়েব অনুরোধ API

এক্সটেনশনটি এখনও তার অ্যাক্সেস আছে এমন সাইটগুলি থেকে যেকোনও অনুরোধ আটকাতে, সংশোধন করতে এবং ব্লক করতে পারে৷ এক্সটেনশনের অ্যাক্সেস নেই এমন সাইটগুলির জন্য, ক্রোম এক্সটেনশনটিকে ব্যাজ করে তা নির্দেশ করে যে এক্সটেনশনটি পৃষ্ঠায় অ্যাক্সেসের অনুরোধ করে৷ ব্যবহারকারী তারপর এক্সটেনশন অ্যাক্সেস মঞ্জুর করতে পারেন; Chrome তারপর ব্যবহারকারীকে আপনার এক্সটেনশনটিকে নেটওয়ার্ক অনুরোধগুলিকে বাধা দেওয়ার জন্য পৃষ্ঠাটি রিফ্রেশ করতে অনুরোধ করে।

বিষয়বস্তু স্ক্রিপ্ট, tabs.executeScript(), tabs.insertCSS()

এক্সটেনশনটি এখনও যে কোনও সাইটের অ্যাক্সেস আছে তার জন্য স্বয়ংক্রিয়ভাবে স্ক্রিপ্ট এবং স্টাইল শীটগুলিকে ইনজেক্ট করতে পারে৷ এক্সটেনশনের অ্যাক্সেস নেই এমন সাইটগুলির জন্য, ক্রোম এক্সটেনশনটিকে ব্যাজ করে তা নির্দেশ করে যে এক্সটেনশনটি পৃষ্ঠায় অ্যাক্সেসের অনুরোধ করে৷ ব্যবহারকারী তারপর এক্সটেনশন অ্যাক্সেস মঞ্জুর করতে পারেন. যদি কন্টেন্ট স্ক্রিপ্টটি document_idle এ ইনজেক্ট করার জন্য সেট করা হয়, স্ক্রিপ্টটি অবিলম্বে ইনজেকশন করবে। অন্যথায়, ক্রোম ব্যবহারকারীকে পৃষ্ঠাটি রিফ্রেশ করার জন্য অনুরোধ করে যাতে আপনার এক্সটেনশনকে পৃষ্ঠা লোডের আগে স্ক্রিপ্টগুলি ইনজেক্ট করার অনুমতি দেয় (document_start বা document_end এ)। tabs.executeScript() এবং tabs.insertCSS() পদ্ধতির জন্য কলব্যাক শুধুমাত্র তখনই আহ্বান করা হয় যখন ব্যবহারকারী সাইটে অ্যাক্সেস মঞ্জুর করে।

কুকিজ এবং ব্যাকগ্রাউন্ড পেজ XHR

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

নীচের উদাহরণটি ব্যাখ্যা করে কিভাবে এটি কুকিজ API-এর জন্য কাজ করতে পারে।

আগে:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

পরে:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

মাইগ্রেশন

নেতিবাচকভাবে প্রভাবিত হওয়া এড়াতে সর্বোত্তম অনুশীলনগুলি কী কী?

এক্সটেনশনগুলি সর্বোত্তম অনুশীলনগুলি অনুসরণ করতে ঐচ্ছিক অনুমতি , সক্রিয় ট্যাব , এবং ঘোষণামূলক সামগ্রী API ব্যবহার করতে পারে৷ ঐচ্ছিক অনুমতি রানটাইমে দেওয়া হয়, এবং এক্সটেনশনকে একটি সাইটে নির্দিষ্ট অ্যাক্সেসের অনুরোধ করার অনুমতি দেয়। ActiveTab অনুমতি প্রভাবিত হয় না, এবং এটি ব্যবহার করে এক্সটেনশনগুলি স্বাভাবিকভাবে কাজ করতে থাকে। declarativeContent API হল প্রতি পৃষ্ঠায় স্ক্রিপ্ট ইনজেক্ট করার জন্য অনেক প্রয়োজনীয়তার বিকল্প।

আমার বর্তমান ব্যবহারকারীদের সেটিংস কি হবে?

এই পরিবর্তনটি অবিলম্বে আপনার এক্সটেনশনে প্রদত্ত বর্তমান অনুমতিগুলিকে প্রভাবিত করবে না৷ অর্থাৎ, এটি আগের মতই চলতে থাকবে যতক্ষণ না ব্যবহারকারী যে সাইটগুলিতে অ্যাক্সেস করার অনুমতি দেওয়া হয়েছে তা সীমাবদ্ধ করার জন্য পদক্ষেপ না নেয়। ভবিষ্যতের রিলিজে, Chrome ব্যবহারকারীদের সেটিংস সামঞ্জস্য করতে আরও নিয়ন্ত্রণ প্রদান করবে।

আমার এক্সটেনশনের একটি সাইটে চালানোর অনুমতি আছে কিনা তা আমি কিভাবে পরীক্ষা করতে পারি?

আপনার এক্সটেনশনকে একটি প্রদত্ত উত্সে অ্যাক্সেস দেওয়া হয়েছে কিনা তা পরীক্ষা করার জন্য আপনি permissions.contains() API ব্যবহার করতে পারেন৷