chrome.userScripts

বর্ণনা

ব্যবহারকারী স্ক্রিপ্ট প্রসঙ্গে ব্যবহারকারীর স্ক্রিপ্ট চালানোর জন্য userScripts API ব্যবহার করুন।

অনুমতি

userScripts

chrome.userScripts API ব্যবহার করতে, আপনার manifest.json-এ "userScripts" অনুমতি যোগ করুন এবং আপনি যে সাইটগুলিতে স্ক্রিপ্ট চালাতে চান তার জন্য "host_permissions" যোগ করুন৷

{
  "name": "User script test extension",
  "manifest_version": 3,
  "minimum_chrome_version": "120",
  "permissions": [
    "userScripts"
  ],
  "host_permissions": [
    "*://example.com/*"
  ]
}

প্রাপ্যতা

Chrome 120+ MV3+

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

একটি ব্যবহারকারীর স্ক্রিপ্ট হল কিছু কোড যা একটি ওয়েব পৃষ্ঠার চেহারা বা আচরণ পরিবর্তন করতে ইনজেক্ট করা হয়। স্ক্রিপ্টগুলি হয় ব্যবহারকারীদের দ্বারা তৈরি করা হয় বা স্ক্রিপ্ট সংগ্রহস্থল বা ব্যবহারকারীর স্ক্রিপ্ট এক্সটেনশন থেকে ডাউনলোড করা হয়।

এক্সটেনশন ব্যবহারকারীদের জন্য বিকাশকারী মোড

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

  1. একটি নতুন ট্যাবে chrome://extensions লিখে এক্সটেনশন পৃষ্ঠায় যান। (ডিজাইন দ্বারা chrome:// URLগুলি লিঙ্কযোগ্য নয়৷)
  2. বিকাশকারী মোডের পাশের টগল সুইচটিতে ক্লিক করে বিকাশকারী মোড সক্ষম করুন৷

    এক্সটেনশন পৃষ্ঠা

    এক্সটেনশন পৃষ্ঠা (chrome://extensions)

chrome.userScripts একটি ত্রুটি নিক্ষেপ করে কিনা তা পরীক্ষা করে আপনি বিকাশকারী মোড সক্ষম করা আছে কিনা তা নির্ধারণ করতে পারেন৷ যেমন:

function isUserScriptsAvailable() {
  try {
    // Property access which throws if developer mode is not enabled.
    chrome.userScripts;
    return true;
  } catch {
    // Not available.
    return false;
  }
}

বিচ্ছিন্ন বিশ্বে কাজ করুন

ব্যবহারকারী এবং বিষয়বস্তু স্ক্রিপ্ট উভয়ই একটি বিচ্ছিন্ন বিশ্বে বা মূল বিশ্বে চলতে পারে। একটি বিচ্ছিন্ন বিশ্ব হল একটি কার্যকর পরিবেশ যা হোস্ট পৃষ্ঠা বা অন্যান্য এক্সটেনশনগুলিতে অ্যাক্সেসযোগ্য নয়৷ এটি একটি ব্যবহারকারী স্ক্রিপ্টকে হোস্ট পৃষ্ঠা বা অন্যান্য এক্সটেনশনের ব্যবহারকারী এবং বিষয়বস্তু স্ক্রিপ্টগুলিকে প্রভাবিত না করে তার জাভাস্ক্রিপ্ট পরিবেশ পরিবর্তন করতে দেয়৷ বিপরীতভাবে, ব্যবহারকারীর স্ক্রিপ্ট (এবং বিষয়বস্তু স্ক্রিপ্ট) হোস্ট পৃষ্ঠা বা অন্যান্য এক্সটেনশনের ব্যবহারকারী এবং বিষয়বস্তু স্ক্রিপ্টের কাছে দৃশ্যমান নয়। মূল বিশ্বে চলমান স্ক্রিপ্টগুলি হোস্ট পৃষ্ঠা এবং অন্যান্য এক্সটেনশনগুলিতে অ্যাক্সেসযোগ্য এবং হোস্ট পৃষ্ঠাগুলি এবং অন্যান্য এক্সটেনশনগুলিতে দৃশ্যমান৷ বিশ্ব নির্বাচন করতে, userScripts.register() কল করার সময় "USER_SCRIPT" বা "MAIN" পাস করুন।

USER_SCRIPT বিশ্বের জন্য একটি বিষয়বস্তু নিরাপত্তা নীতি কনফিগার করতে, userScripts.configureWorld() কল করুন :

chrome.userScripts.configureWorld({
  csp: "script-src 'self'"
});

মেসেজিং

বিষয়বস্তু স্ক্রিপ্ট এবং অফস্ক্রিন নথিগুলির মতো, ব্যবহারকারীর স্ক্রিপ্টগুলি মেসেজিং ব্যবহার করে একটি এক্সটেনশনের অন্যান্য অংশের সাথে যোগাযোগ করে (অর্থাৎ তারা runtime.sendMessage() এবং runtime.connect() একটি এক্সটেনশনের অন্য অংশ হিসাবে কল করতে পারে)। যাইহোক, তারা ডেডিকেটেড ইভেন্ট হ্যান্ডলার ব্যবহার করে প্রাপ্ত হয় (অর্থাৎ, তারা onMessage বা onConnect ব্যবহার করে না)। এই হ্যান্ডলারদের বলা হয় runtime.onUserScriptMessage এবং runtime.onUserScriptConnect । ডেডিকেটেড হ্যান্ডলারগুলি ব্যবহারকারীর স্ক্রিপ্ট থেকে বার্তাগুলি সনাক্ত করা সহজ করে তোলে, যা একটি কম বিশ্বস্ত প্রসঙ্গ।

একটি বার্তা পাঠানোর আগে, আপনাকে অবশ্যই configureWorld() কে কল করতে হবে messaging আর্গুমেন্ট true সেট করে। মনে রাখবেন যে csp এবং messaging উভয় আর্গুমেন্ট একই সময়ে পাস করা যেতে পারে।

chrome.userScripts.configureWorld({
  messaging: true
});

এক্সটেনশন আপডেট

যখন একটি এক্সটেনশন আপডেট হয় তখন ব্যবহারকারীর স্ক্রিপ্টগুলি সাফ করা হয়৷ আপনি এক্সটেনশন পরিষেবা কর্মীর runtime.onInstalled ইভেন্ট হ্যান্ডলারে কোড চালিয়ে সেগুলিকে আবার যোগ করতে পারেন৷ শুধুমাত্র ইভেন্ট কলব্যাকে পাস করা "update" কারণের উত্তর দিন।

উদাহরণ

এই উদাহরণটি আমাদের নমুনা সংগ্রহস্থলের ইউজারস্ক্রিপ্ট নমুনা থেকে।

একটি স্ক্রিপ্ট নিবন্ধন করুন

নিম্নলিখিত উদাহরণটি register() জন্য একটি মৌলিক কল দেখায়। প্রথম আর্গুমেন্ট হল অবজেক্টের একটি অ্যারে যা রেজিস্টার করা স্ক্রিপ্টগুলিকে সংজ্ঞায়িত করে। এখানে দেখানোর চেয়ে আরও বেশি বিকল্প রয়েছে।

chrome.userScripts.register([{
  id: 'test',
  matches: ['*://*/*'],
  js: [{code: 'alert("Hi!")'}]
}]);

প্রকারভেদ

ExecutionWorld

একটি ব্যবহারকারী স্ক্রিপ্টের মধ্যে চালানোর জন্য জাভাস্ক্রিপ্ট বিশ্ব।

এনাম

"প্রধান"
DOM-এর এক্সিকিউশন এনভায়রনমেন্ট নির্দিষ্ট করে, যা হোস্ট পেজের জাভাস্ক্রিপ্টের সাথে শেয়ার করা এক্সিকিউশন এনভায়রনমেন্ট।

"USER_SCRIPT"
এক্সিকিউশন এনভায়রনমেন্ট নির্দিষ্ট করে যা ব্যবহারকারীর স্ক্রিপ্টের জন্য নির্দিষ্ট এবং পৃষ্ঠার CSP থেকে মুক্ত।

RegisteredUserScript

বৈশিষ্ট্য

  • সব ফ্রেম

    বুলিয়ান ঐচ্ছিক

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

  • গ্লবস বাদ দিন

    স্ট্রিং[] ঐচ্ছিক

    পৃষ্ঠাগুলির জন্য ওয়াইল্ডকার্ড প্যাটার্ন নির্দিষ্ট করে এই ব্যবহারকারী স্ক্রিপ্টটি ইনজেক্ট করা হবে না৷

  • ম্যাচ বাদ দিন

    স্ট্রিং[] ঐচ্ছিক

    এই ব্যবহারকারী স্ক্রিপ্ট অন্যথায় ইনজেক্ট করা হবে যে পৃষ্ঠাগুলি বাদ দেয়। এই স্ট্রিংগুলির সিনট্যাক্স সম্পর্কে আরও বিস্তারিত জানার জন্য ম্যাচ প্যাটার্নস দেখুন।

  • আইডি

    স্ট্রিং

    API কলে নির্দিষ্ট করা ব্যবহারকারী স্ক্রিপ্টের ID। এই বৈশিষ্ট্যটি '_' দিয়ে শুরু হওয়া উচিত নয় কারণ এটি তৈরি করা স্ক্রিপ্ট আইডিগুলির জন্য একটি উপসর্গ হিসাবে সংরক্ষিত।

  • গ্লবস অন্তর্ভুক্ত

    স্ট্রিং[] ঐচ্ছিক

    এই ব্যবহারকারী স্ক্রিপ্টটি ইনজেকশন করা হবে এমন পৃষ্ঠাগুলির জন্য ওয়াইল্ডকার্ড প্যাটার্ন নির্দিষ্ট করে৷

  • স্ক্রিপ্টসোর্স অবজেক্টের তালিকা যা স্ক্রিপ্টের উত্সগুলিকে সংজ্ঞায়িত করে যা মিলিত পৃষ্ঠাগুলিতে ইনজেক্ট করা হবে৷

  • মেলে

    স্ট্রিং[] ঐচ্ছিক

    এই ব্যবহারকারী স্ক্রিপ্টটি কোন পৃষ্ঠাগুলিতে ইনজেকশন করা হবে তা নির্দিষ্ট করে৷ এই স্ট্রিংগুলির সিনট্যাক্স সম্পর্কে আরও বিস্তারিত জানার জন্য ম্যাচ প্যাটার্নস দেখুন। এই সম্পত্তি অবশ্যই ${ref:register}-এর জন্য নির্দিষ্ট করতে হবে।

  • রানআট

    RunAt ঐচ্ছিক

    জাভাস্ক্রিপ্ট ফাইলগুলি কখন ওয়েব পৃষ্ঠাতে প্রবেশ করানো হয় তা নির্দিষ্ট করে৷ পছন্দের এবং ডিফল্ট মান হল document_idle

  • বিশ্ব

    ExecutionWorld ঐচ্ছিক

    স্ক্রিপ্ট চালানোর জন্য জাভাস্ক্রিপ্ট এক্সিকিউশন এনভায়রনমেন্ট। ডিফল্ট হল `USER_SCRIPT`

ScriptSource

বৈশিষ্ট্য

  • কোড

    স্ট্রিং ঐচ্ছিক

    ইনজেক্ট করার জন্য জাভাস্ক্রিপ্ট কোড ধারণকারী একটি স্ট্রিং। সঠিকভাবে file বা code একটি নির্দিষ্ট করা আবশ্যক।

  • ফাইল

    স্ট্রিং ঐচ্ছিক

    এক্সটেনশনের রুট ডিরেক্টরির সাথে সম্পর্কিত জাভাস্ক্রিপ্ট ফাইলের পাথ ইনজেকশনের জন্য। সঠিকভাবে file বা code একটি নির্দিষ্ট করা আবশ্যক।

UserScriptFilter

বৈশিষ্ট্য

  • আইডি

    স্ট্রিং[] ঐচ্ছিক

    getScripts শুধুমাত্র এই তালিকায় নির্দিষ্ট আইডি সহ স্ক্রিপ্ট প্রদান করে।

WorldProperties

বৈশিষ্ট্য

  • csp

    স্ট্রিং ঐচ্ছিক

    বিশ্ব সিএসপি নির্দিষ্ট করে। ডিফল্ট হল `ISOLATED` ওয়ার্ল্ড সিএসপি।

  • মেসেজিং

    বুলিয়ান ঐচ্ছিক

    মেসেজিং এপিআই প্রকাশ করা হয়েছে কিনা তা নির্দিষ্ট করে। ডিফল্ট false .

পদ্ধতি

configureWorld()

প্রতিশ্রুতি
chrome.userScripts.configureWorld(
  properties: WorldProperties,
  callback?: function,
)

`USER_SCRIPT` এক্সিকিউশন এনভায়রনমেন্ট কনফিগার করে।

পরামিতি

  • বৈশিষ্ট্য

    ব্যবহারকারীর স্ক্রিপ্ট বিশ্ব কনফিগারেশন ধারণ করে।

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    () => void

রিটার্নস

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

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

getScripts()

প্রতিশ্রুতি
chrome.userScripts.getScripts(
  filter?: UserScriptFilter,
  callback?: function,
)

এই এক্সটেনশনের জন্য সমস্ত গতিশীল-নিবন্ধিত ব্যবহারকারী স্ক্রিপ্ট ফেরত দেয়।

পরামিতি

  • ফিল্টার

    UserScriptFilter ঐচ্ছিক

    নির্দিষ্ট করা থাকলে, এই পদ্ধতিটি শুধুমাত্র ব্যবহারকারীর স্ক্রিপ্টগুলি প্রদান করে যা এর সাথে মেলে।

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    (scripts: RegisteredUserScript[]) => void

রিটার্নস

  • প্রতিশ্রুতি< RegisteredUserScript []>

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

register()

প্রতিশ্রুতি
chrome.userScripts.register(
  scripts: RegisteredUserScript[],
  callback?: function,
)

এই এক্সটেনশনের জন্য এক বা একাধিক ব্যবহারকারী স্ক্রিপ্ট নিবন্ধন করে।

পরামিতি

  • নিবন্ধিত করার জন্য ব্যবহারকারীর স্ক্রিপ্টগুলির একটি তালিকা রয়েছে৷

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    () => void

রিটার্নস

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

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

unregister()

প্রতিশ্রুতি
chrome.userScripts.unregister(
  filter?: UserScriptFilter,
  callback?: function,
)

এই এক্সটেনশনের জন্য সমস্ত গতিশীল-নিবন্ধিত ব্যবহারকারী স্ক্রিপ্টগুলি নিবন্ধনমুক্ত করে৷

পরামিতি

  • ফিল্টার

    UserScriptFilter ঐচ্ছিক

    নির্দিষ্ট করা থাকলে, এই পদ্ধতিটি শুধুমাত্র ব্যবহারকারীর স্ক্রিপ্টগুলিকে নিবন্ধনমুক্ত করে যা এর সাথে মেলে।

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    () => void

রিটার্নস

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

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

update()

প্রতিশ্রুতি
chrome.userScripts.update(
  scripts: RegisteredUserScript[],
  callback?: function,
)

এই এক্সটেনশনের জন্য এক বা একাধিক ব্যবহারকারীর স্ক্রিপ্ট আপডেট করে।

পরামিতি

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

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    () => void

রিটার্নস

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

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