browser.debugger

বিবরণ

chrome.debugger API, Chrome-এর রিমোট ডিবাগিং প্রোটোকল-এর জন্য বিকল্প ট্রান্সপোর্ট হিসেবে কাজ করে। নেটওয়ার্ক ইন্টার‍্যাকশন ইন্সট্রুমেন্ট, জাভাস্ক্রিপ্ট ডিবাগ, DOM ও CSS মিউটেট এবং আরও অনেক কিছু করতে এক বা একাধিক ট্যাবে অ্যাটাচ করতে chrome.debugger ব্যবহার করুন। sendCommand-এর সাথে ট্যাব টার্গেট করতে এবং onEvent কলব্যাক থেকে tabId-এর মাধ্যমে ইভেন্ট রুট করতে Debuggee প্রপার্টি tabId ব্যবহার করুন।

অনুমতি

debugger

এই API ব্যবহার করার জন্য আপনার এক্সটেনশনের ম্যানিফেস্টে "debugger" অনুমতি ঘোষণা করতে হবে।

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

এন্টারপ্রাইজ নীতি সংক্রান্ত বিধিনিষেধ

এন্টারপ্রাইজ ডিভাইসে, কিছু নীতি অ্যাটাচ করার সময় অল-অর-নাথিং মডেল ব্যবহার করে ডিবাগার অ্যাটাচ করা থেকে এক্সটেনশনকে সীমাবদ্ধ করতে পারে (browser.debugger.attach()):

  • হোস্ট সংক্রান্ত বিধিনিষেধ: এন্টারপ্রাইজ নীতি ExtensionSettings কোনও এক্সটেনশনের জন্য ব্লক করা হোস্ট (runtime_blocked_hosts) কনফিগার করলে, browser.debugger.attach() সব টার্গেটে ব্লক করা হয় এবং এই সমস্যার মেসেজ দেখানো হয় "Host access is restricted by policy." (এমনকি স্বতন্ত্র অরিজিন runtime_allowed_hosts-এ থাকলেও)।
  • স্ক্রিনশট ও DLP নীতি: এন্টারপ্রাইজ নীতি DisableScreenshots স্ক্রিনশট ক্যাপচার করার সুবিধা বন্ধ করে দিলে অথবা টার্গেটের উপর ডেটা হারানো প্রতিরোধ (DLP) সংক্রান্ত নিয়ম প্রযোজ্য হলে, browser.debugger.attach() "Screenshot capture is restricted by policy." সমস্যার কারণে কাজ করে না।

ধারণা ও ব্যবহার

অ্যাটাচ করা হয়ে গেলে, browser.debugger API আপনাকে নির্দিষ্ট টার্গেটে Chrome DevTools Protocol (CDP) কমান্ড পাঠাতে দেয়। এই ডকুমেন্টেশনে CDP-র ব্যাপারে বিস্তারিত আলোচনা করা হয়নি—CDP-র ব্যাপারে আরও জানতে অফিসিয়াল CDP ডকুমেন্টেশন দেখুন।

টার্গেট

টার্গেট বলতে এমন কিছুকে বোঝায় যা ডিবাগ করা হচ্ছে—এর মধ্যে ট্যাব, iframe বা ওয়ার্কার অন্তর্ভুক্ত থাকতে পারে। প্রতিটি টার্গেট UUID দ্বারা শনাক্ত করা হয় এবং এর সাথে একটি সংশ্লিষ্ট টাইপ থাকে (যেমন iframe, shared_worker এবং আরও অনেক কিছু)।

একটি টার্গেটের মধ্যে একাধিক এক্সিকিউশন কনটেক্সট থাকতে পারে—যেমন একই প্রসেস iframe কোনও অনন্য টার্গেট পায় না, তবে এর পরিবর্তে বিভিন্ন কনটেক্সট হিসেবে দেখানো হয় যা একটি টার্গেট থেকে অ্যাক্সেস করা যায়।

বিধিনিষেধযুক্ত ডোমেন

নিরাপত্তার কারণে, browser.debugger API সব Chrome DevTools প্রোটোকল ডোমেনে অ্যাক্সেস প্রদান করে না। উপলভ্য ডোমেনগুলি হল: অ্যাক্সেসিবিলিটি, অডিট, CacheStorage, Console, CSS, Database, Debugger, DOM, DOMDebugger, DOMSnapshot, Emulation, Fetch, IO, Input, Inspector, Log, Network, Overlay, Page, Performance, Runtime, Storage, Target, Tracing, WebAudio এবং WebAuthn।

ফ্রেম নিয়ে কাজ করা

ফ্রেম থেকে টার্গেটের কোনও ওয়ান-টু-ওয়ান ম্যাপিং নেই। একটি ট্যাবের মধ্যে, একাধিক একই প্রসেস ফ্রেম একই টার্গেট শেয়ার করতে পারে কিন্তু আলাদা এক্সিকিউশন কনটেক্সট ব্যবহার করে। অন্যদিকে, আউট-অফ-প্রসেস iframe-এর জন্য নতুন টার্গেট তৈরি করা হতে পারে।

সব ফ্রেমে অ্যাটাচ করতে, আপনাকে প্রতিটি ধরনের ফ্রেম আলাদাভাবে ম্যানেজ করতে হবে:

  • একই প্রসেস ফ্রেমের সাথে যুক্ত নতুন এক্সিকিউশন কনটেক্সট শনাক্ত করতে Runtime.executionContextCreated ইভেন্ট শুনুন।

  • আউট-অফ-প্রসেস ফ্রেম শনাক্ত করতে সম্পর্কিত টার্গেটের সাথে অ্যাটাচ করুন বিকল্পে গিয়ে ধাপগুলি অনুসরণ করুন।

কোনও টার্গেটের সাথে কানেক্ট করার পরে, আপনি হয়ত আরও সম্পর্কিত টার্গেটের সাথে কানেক্ট করতে চাইবেন যার মধ্যে আউট-অফ-প্রসেস চাইল্ড ফ্রেম বা সংশ্লিষ্ট ওয়ার্কার অন্তর্ভুক্ত।

Chrome 125 থেকে শুরু করে, browser.debugger API ফ্ল্যাট সেশন সাপোর্ট করে। এটি আপনাকে মূল ডিবাগার সেশনে চাইল্ড হিসেবে অতিরিক্ত টার্গেট যোগ করতে এবং browser.debugger.attach-এ অন্য কল না করেই তাদের মেসেজ পাঠাতে দেয়। পরিবর্তে, আপনি যে চাইল্ড টার্গেটে কমান্ড পাঠাতে চান সেটি শনাক্ত করতে browser.debugger.sendCommand কল করার সময় sessionId প্রপার্টি যোগ করতে পারেন।

প্রসেসের বাইরে থাকা চাইল্ড ফ্রেমে অটোমেটিক অ্যাটাচ করতে, প্রথমে Target.attachedToTarget ইভেন্টের জন্য লিসেনার যোগ করুন:

browser.debugger.onEvent.addListener((source, method, params) => {
  if (method === "Target.attachedToTarget") {
    // `source` identifies the parent session, but we need to construct a new
    // identifier for the child session
    const session = { ...source, sessionId: params.sessionId };

    // Call any needed CDP commands for the child session
    await browser.debugger.sendCommand(session, "Runtime.enable");
  }
});

তারপর, Target.setAutoAttach কমান্ড পাঠিয়ে অটোমেটিক অ্যাটাচ করার সুবিধা চালু করুন, flatten বিকল্প true-এ সেট করা থাকবে:

await browser.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
  autoAttach: true,
  waitForDebuggerOnStart: false,
  flatten: true,
  filter: [{ type: "iframe", exclude: false }]
});

অটো-অ্যাটাচ শুধুমাত্র সেই ফ্রেমেই অ্যাটাচ করে যেটির ব্যাপারে টার্গেট জানে, যা এর সাথে যুক্ত ফ্রেমের ইমিডিয়েট চাইল্ড ফ্রেমের মধ্যে সীমাবদ্ধ। যেমন, ফ্রেমের ক্রমপর্যায় A -> B -> C (যেখানে সবকটি ক্রস-অরিজিন) হলে, A-এর সাথে যুক্ত টার্গেটের জন্য Target.setAutoAttach কল করলে, সেশন B-এর সাথেও অ্যাটাচ হয়ে যাবে। তবে, এটি রিকার্সিভ নয়, তাই B-এর জন্য Target.setAutoAttach-কেও কল করতে হবে যাতে সেশনটি C-এর সাথে অ্যাটাচ করা যায়।

উদাহরণ

এই API ব্যবহার করে দেখতে, chrome-extension-samples রিপোজিটরি থেকে debugger API উদাহরণ ইনস্টল করুন।

ধরন

Debuggee

ডিবাগি শনাক্তকারী। tabId, extensionId বা targetId-এর মধ্যে যেকোনও একটি উল্লেখ করতে হবে

প্রপার্টি

  • extensionId

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

    আপনি যে এক্সটেনশন ডিবাগ করতে চান সেটির আইডি। --silent-debugger-extension-api কমান্ড-লাইন সুইচ ব্যবহার করা হলে তবেই এক্সটেনশন ব্যাকগ্রাউন্ড পৃষ্ঠায় অ্যাটাচ করা সম্ভব।

  • tabId

    নম্বর ঐচ্ছিক

    আপনি যে ট্যাব ডিবাগ করতে চান সেটির আইডি।

  • targetId

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

    ডিবাগ টার্গেটের অস্বচ্ছ আইডি।

DebuggerSession

Chrome 125+ Chrome 148 থেকে browser.*

ডিবাগার সেশন শনাক্তকারী। tabId, extensionId বা targetId-এর মধ্যে যেকোনও একটি উল্লেখ করতে হবে। এছাড়াও, একটি ঐচ্ছিক sessionId প্রদান করা যেতে পারে। onEvent থেকে পাঠানো আর্গুমেন্টের জন্য sessionId উল্লেখ করা থাকলে, এর অর্থ হল রুট ডিবাগি সেশনের মধ্যে চাইল্ড প্রোটোকল সেশন থেকে ইভেন্টটি আসছে। sendCommand-এ পাস করার সময় sessionId উল্লেখ করা থাকলে, এটি রুট ডিবাগি সেশনের মধ্যে চাইল্ড প্রোটোকল সেশনকে টার্গেট করে।

প্রপার্টি

  • extensionId

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

    আপনি যে এক্সটেনশন ডিবাগ করতে চান সেটির আইডি। --silent-debugger-extension-api কমান্ড-লাইন সুইচ ব্যবহার করা হলে তবেই এক্সটেনশন ব্যাকগ্রাউন্ড পৃষ্ঠায় অ্যাটাচ করা সম্ভব।

  • sessionId

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

    Chrome DevTools Protocol সেশনের অস্বচ্ছ আইডি। tabId, extensionId বা targetId দ্বারা শনাক্ত করা রুট সেশনের মধ্যে চাইল্ড সেশন শনাক্ত করে।

  • tabId

    নম্বর ঐচ্ছিক

    আপনি যে ট্যাব ডিবাগ করতে চান সেটির আইডি।

  • targetId

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

    ডিবাগ টার্গেটের অস্বচ্ছ আইডি।

DetachReason

Chrome 44+ Chrome 148 থেকে browser.*

কানেকশন বন্ধ করার কারণ।

Enum

"target_closed"

"canceled_by_user"

TargetInfo

টার্গেট সংক্রান্ত তথ্য ডিবাগ করুন

প্রপার্টি

  • সংযুক্ত

    বুলিয়ান

    ডিবাগার আগে থেকেই অ্যাটাচ করা থাকলে সত্য।

  • extensionId

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

    এক্সটেনশন আইডি, ধরন = 'background_page' হলে এটি সংজ্ঞায়িত করা হয়।

  • faviconUrl

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

    টার্গেট ফেভিকন URL।

  • id

    স্ট্রিং

    টার্গেট আইডি।

  • tabId

    নম্বর ঐচ্ছিক

    ট্যাব আইডি, ধরন == 'পৃষ্ঠা' হলে সংজ্ঞায়িত।

  • শীর্ষক

    স্ট্রিং

    টার্গেট পৃষ্ঠার টাইটেল।

  • ধরন

    টার্গেটের ধরন।

  • URL

    স্ট্রিং

    টার্গেট URL।

TargetInfoType

Chrome 44+ Chrome 148 থেকে browser.*

টার্গেটের ধরন।

Enum

"পৃষ্ঠা"

"background_page"

"কর্মী"

"অন্যান্য"

পদ্ধতি

attach()

browser.debugger.attach(
  target: Debuggee,
  requiredVersion: string,
)
: Promise<void>

প্রদত্ত টার্গেটে ডিবাগার অ্যাটাচ করে।

প্যারামিটারগুলি

  • আপনি যে ডিবাগিং টার্গেটের সাথে অ্যাটাচ করতে চান।

  • requiredVersion

    স্ট্রিং

    প্রয়োজনীয় ডিবাগিং প্রোটোকল ভার্সন ("0.1")। শুধুমাত্র ম্যাচিং মেজর ভার্সন এবং আরও বেশি বা সমান মাইনর ভার্সনের সাথে ডিবাগি অ্যাটাচ করা যায়। প্রোটোকল ভার্সনের তালিকা এখান থেকে পাওয়া যাবে।

রিটার্ন

  • <void> প্রমিস

    Chrome 96+ Chrome 148 থেকে browser.*

    অ্যাটাচ অপারেশন সম্পূর্ণ বা ব্যর্থ হলে সমাধান হয়ে যায়। কোনও ভ্যালু ছাড়াই প্রমিস রিজলভ হয়। If the attach fails, the promise will be rejected.

detach()

browser.debugger.detach(
  target: Debuggee,
)
: Promise<void>

প্রদত্ত টার্গেট থেকে ডিবাগার আলাদা করে।

প্যারামিটারগুলি

  • ডিবাগিং টার্গেট যেখান থেকে আপনি ডিটাচ করতে চান।

রিটার্ন

  • <void> প্রমিস

    Chrome 96+ Chrome 148 থেকে browser.*

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

getTargets()

browser.debugger.getTargets(): Promise<TargetInfo[]>

উপলভ্য ডিবাগ টার্গেটের তালিকা দেখায়।

রিটার্ন

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

    Chrome 96+ Chrome 148 থেকে browser.*

sendCommand()

browser.debugger.sendCommand(
  target: DebuggerSession,
  method: string,
  commandParams?: object,
)
: Promise<object | undefined>

ডিবাগিং টার্গেটে প্রদত্ত কমান্ড পাঠায়।

প্যারামিটারগুলি

  • আপনি যে ডিবাগিং টার্গেটে কমান্ড পাঠাতে চান।

  • মেথড

    স্ট্রিং

    পদ্ধতির নাম। রিমোট ডিবাগিং প্রোটোকল দ্বারা সংজ্ঞায়িত পদ্ধতিগুলির মধ্যে একটি হতে হবে।

  • commandParams

    অবজেক্ট ঐচ্ছিক

    অনুরোধের প্যারামিটার সহ JSON অবজেক্ট। এই অবজেক্টটি অবশ্যই প্রদত্ত পদ্ধতির জন্য রিমোট ডিবাগিং প্যারাম স্কিমের সাথে সামঞ্জস্যপূর্ণ হতে হবে।

রিটার্ন

  • <অবজেক্ট | অনির্ধারিত> প্রমিস

    Chrome 96+ Chrome 148 থেকে browser.*

    রেসপন্স বডি। মেসেজ পোস্ট করার সময় কোনও সমস্যা হলে, প্রমিস বাতিল করা হবে।

ইভেন্ট

onDetach

browser.debugger.onDetach.addListener(
  callback: function,
)

ট্যাবের জন্য ব্রাউজার ডিবাগিং সেশন বন্ধ করলে ফায়ার করা হয়। ট্যাব বন্ধ করা হলে অথবা অ্যাটাচ করা ট্যাবের জন্য Chrome DevTools চালু করা হলে এটি হয়।

প্যারামিটারগুলি

onEvent

browser.debugger.onEvent.addListener(
  callback: function,
)

ডিবাগিং টার্গেট যখনই ইন্সট্রুমেন্টেশন ইভেন্ট ইস্যু করে তখনই ফায়ার করা হয়।

প্যারামিটারগুলি

  • কলব্যাক

    ফাংশন

    callback প্যারামিটারটি দেখতে এইরকম:

    (source: DebuggerSession, method: string, params?: object) => void

    • সোর্স
    • মেথড

      স্ট্রিং

    • প্যারাম

      অবজেক্ট ঐচ্ছিক