chrome.debugger

বর্ণনা

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

অনুমতি

debugger

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

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

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

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

টার্গেট

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

একটি টার্গেটের মধ্যে, একাধিক এক্সিকিউশন প্রসঙ্গ থাকতে পারে—উদাহরণস্বরূপ একই প্রক্রিয়া আইফ্রেমগুলি একটি অনন্য টার্গেট পায় না কিন্তু পরিবর্তে বিভিন্ন প্রসঙ্গ হিসাবে উপস্থাপন করা হয় যা একটি একক লক্ষ্য থেকে অ্যাক্সেস করা যেতে পারে।

সীমাবদ্ধ ডোমেইন

নিরাপত্তার কারণে, chrome.debugger API সমস্ত Chrome DevTools প্রোটোকল ডোমেনে অ্যাক্সেস প্রদান করে না। উপলব্ধ ডোমেনগুলি হল: অ্যাক্সেসিবিলিটি , অডিট , ক্যাশেস্টোরেজ , কনসোল , CSS , ডেটাবেস , ডিবাগার , DOM , DOMDebugger , DOMSnapshot , Emulation , Fetch , IO , Input , Inspector , Log , Network , Overlay , Perform , Spage , Runtor , Protor , টার্গেট , ট্রেসিং , WebAudio , এবং WebAuthn

ফ্রেম সঙ্গে কাজ

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

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

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

  • প্রক্রিয়ার বাইরের ফ্রেমগুলি সনাক্ত করতে সম্পর্কিত লক্ষ্যগুলির সাথে সংযুক্ত করার পদক্ষেপগুলি অনুসরণ করুন৷

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

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

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

chrome.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 chrome.debugger.sendCommand(session, "Runtime.enable");
  }
});

তারপর, flatten বিকল্পটি true সেট করে Target.setAutoAttach কমান্ড পাঠিয়ে স্বয়ংক্রিয় সংযুক্তি সক্ষম করুন:

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

উদাহরণ

এই APIটি চেষ্টা করতে, chrome-extension-samples repository থেকে ডিবাগার API উদাহরণটি ইনস্টল করুন।

প্রকারভেদ

Debuggee

ডিবাগী শনাক্তকারী। হয় tabId, extensionId বা targetId অবশ্যই উল্লেখ করতে হবে

বৈশিষ্ট্য

  • এক্সটেনশন আইডি

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

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

  • ট্যাবআইডি

    সংখ্যা ঐচ্ছিক

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

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

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

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

DebuggerSession

Chrome 125+

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

বৈশিষ্ট্য

  • এক্সটেনশন আইডি

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

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

  • সেশন আইডি

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

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

  • ট্যাবআইডি

    সংখ্যা ঐচ্ছিক

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

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

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

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

DetachReason

Chrome 44+

সংযোগ বন্ধ করার কারণ।

এনাম

"লক্ষ্য_বন্ধ"

"ব্যবহারকারী_দ্বারা_বাতিল"

TargetInfo

লক্ষ্য তথ্য ডিবাগ করুন

বৈশিষ্ট্য

  • সংযুক্ত

    বুলিয়ান

    ডিবাগার ইতিমধ্যে সংযুক্ত থাকলে সত্য।

  • এক্সটেনশন আইডি

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

    এক্সটেনশন আইডি, সংজ্ঞায়িত যদি প্রকার = 'ব্যাকগ্রাউন্ড_পৃষ্ঠা'।

  • faviconUrl

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

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

  • আইডি

    স্ট্রিং

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

  • ট্যাবআইডি

    সংখ্যা ঐচ্ছিক

    ট্যাব আইডি, সংজ্ঞায়িত যদি টাইপ == 'পৃষ্ঠা'।

  • শিরোনাম

    স্ট্রিং

    লক্ষ্য পৃষ্ঠা শিরোনাম.

  • টার্গেট টাইপ।

  • url

    স্ট্রিং

    লক্ষ্য URL.

TargetInfoType

Chrome 44+

টার্গেট টাইপ।

এনাম

"পৃষ্ঠা"

"পটভূমি_পৃষ্ঠা"

"কর্মী"

"অন্য"

পদ্ধতি

attach()

প্রতিশ্রুতি
chrome.debugger.attach(
  target: Debuggee,
  requiredVersion: string,
  callback?: function,
)

প্রদত্ত লক্ষ্যে ডিবাগার সংযুক্ত করে।

পরামিতি

  • লক্ষ্য

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

  • প্রয়োজনীয় সংস্করণ

    স্ট্রিং

    প্রয়োজনীয় ডিবাগিং প্রোটোকল সংস্করণ ("0.1")। কেউ শুধুমাত্র মেজর মেজর ভার্সন এবং বৃহত্তর বা সমান ছোট সংস্করণের সাথে ডিবাগীর সাথে সংযুক্ত করতে পারে। প্রোটোকল সংস্করণের তালিকা এখানে পাওয়া যাবে।

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    () => void

রিটার্নস

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

    Chrome 96+

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

detach()

প্রতিশ্রুতি
chrome.debugger.detach(
  target: Debuggee,
  callback?: function,
)

প্রদত্ত লক্ষ্য থেকে ডিবাগারকে বিচ্ছিন্ন করে।

পরামিতি

  • লক্ষ্য

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

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    () => void

রিটার্নস

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

    Chrome 96+

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

getTargets()

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

উপলব্ধ ডিবাগ লক্ষ্যগুলির তালিকা প্রদান করে।

পরামিতি

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    (result: TargetInfo[]) => void

    • উপলব্ধ ডিবাগ লক্ষ্যগুলির সাথে সম্পর্কিত TargetInfo অবজেক্টের অ্যারে।

রিটার্নস

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

    Chrome 96+

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

sendCommand()

প্রতিশ্রুতি
chrome.debugger.sendCommand(
  target: DebuggerSession,
  method: string,
  commandParams?: object,
  callback?: function,
)

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

পরামিতি

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

  • পদ্ধতি

    স্ট্রিং

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

  • কমান্ড প্যারামস

    বস্তু ঐচ্ছিক

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

  • কলব্যাক

    ফাংশন ঐচ্ছিক

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

    (result?: object) => void

    • ফলাফল

      বস্তু ঐচ্ছিক

      প্রতিক্রিয়া সহ JSON অবজেক্ট। প্রতিক্রিয়ার কাঠামো পদ্ধতির নামের উপর নির্ভর করে পরিবর্তিত হয় এবং দূরবর্তী ডিবাগিং প্রোটোকলে কমান্ড বিবরণের 'রিটার্ন' বৈশিষ্ট্য দ্বারা সংজ্ঞায়িত করা হয়।

রিটার্নস

  • প্রতিশ্রুতি <অবজেক্ট | undefined>

    Chrome 96+

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

ঘটনা

onDetach

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

যখন ব্রাউজার ট্যাবের জন্য ডিবাগিং সেশন বন্ধ করে তখন ফায়ার করা হয়। এটি ঘটে যখন হয় ট্যাবটি বন্ধ করা হয় বা সংযুক্ত ট্যাবের জন্য Chrome DevTools আহ্বান করা হয়।

পরামিতি

onEvent

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

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

পরামিতি

  • কলব্যাক

    ফাংশন

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

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