বিবরণ
chrome.debugger API Chrome এর রিমোট ডিবাগিং প্রোটোকলের জন্য একটি বিকল্প পরিবহন হিসেবে কাজ করে। নেটওয়ার্ক ইন্টারঅ্যাকশন ইন্সট্রুমেন্ট করতে, JavaScript ডিবাগ করতে, DOM এবং CSS মিউটেট করতে এবং আরও অনেক কিছু করতে এক বা একাধিক ট্যাবের সাথে সংযুক্ত করতে chrome.debugger ব্যবহার করুন। sendCommand দিয়ে ট্যাবগুলিকে টার্গেট করতে এবং onEvent কলব্যাক থেকে tabId দ্বারা ইভেন্টগুলিকে রুট করতে Debuggee প্রোপার্টি tabId ব্যবহার করুন।
অনুমতিসমূহ
debugger এই API ব্যবহার করার জন্য আপনাকে আপনার এক্সটেনশনের ম্যানিফেস্টে "debugger" অনুমতি ঘোষণা করতে হবে।
{
"name": "My extension",
...
"permissions": [
"debugger",
],
...
}
ধারণা এবং ব্যবহার
একবার সংযুক্ত হয়ে গেলে, chrome.debugger API আপনাকে একটি নির্দিষ্ট লক্ষ্যে Chrome DevTools Protocol (CDP) কমান্ড পাঠাতে দেয়। CDP সম্পর্কে বিস্তারিত ব্যাখ্যা করা এই ডকুমেন্টেশনের সুযোগের বাইরে - CDP সম্পর্কে আরও জানতে অফিসিয়াল CDP ডকুমেন্টেশন দেখুন।
লক্ষ্যবস্তু
টার্গেটগুলি এমন কিছুকে প্রতিনিধিত্ব করে যা ডিবাগ করা হচ্ছে—এর মধ্যে একটি ট্যাব, একটি আইফ্রেম বা একটি কর্মী অন্তর্ভুক্ত থাকতে পারে। প্রতিটি টার্গেট একটি UUID দ্বারা চিহ্নিত করা হয় এবং এর একটি সংশ্লিষ্ট ধরণ থাকে (যেমন iframe , shared_worker , এবং আরও অনেক কিছু)।
একটি টার্গেটের মধ্যে, একাধিক এক্সিকিউশন প্রসঙ্গ থাকতে পারে—উদাহরণস্বরূপ, একই প্রক্রিয়ার আইফ্রেমগুলি একটি অনন্য টার্গেট পায় না বরং পরিবর্তে বিভিন্ন প্রসঙ্গ হিসাবে উপস্থাপিত হয় যা একটি একক টার্গেট থেকে অ্যাক্সেস করা যেতে পারে।
সীমাবদ্ধ ডোমেন
নিরাপত্তার কারণে, chrome.debugger API সমস্ত Chrome DevTools প্রোটোকল ডোমেনে অ্যাক্সেস প্রদান করে না। উপলব্ধ ডোমেনগুলি হল: অ্যাক্সেসিবিলিটি , অডিট , ক্যাশেস্টোরেজ , কনসোল , CSS , ডেটাবেস , ডিবাগার , DOM , DOMDebugger , DOMSnapshot , Emulation , Fetch , IO , Input , Inspector , Log , Network , Overlay , Page , Performance , Profiler , Runtime , Storage , Target , Tracing , 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");
}
});
তারপর, Target.setAutoAttach কমান্ডটি পাঠিয়ে flatten বিকল্পটি true এ সেট করে auto attach সক্ষম করুন:
await chrome.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
autoAttach: true,
waitForDebuggerOnStart: false,
flatten: true,
filter: [{ type: "iframe", exclude: false }]
});
অটো-অ্যাটাচ শুধুমাত্র সেই ফ্রেমগুলিতে সংযুক্ত হয় যেগুলি লক্ষ্যবস্তু জানে, যা কেবলমাত্র সেই ফ্রেমগুলিতেই সীমাবদ্ধ যা এর সাথে সম্পর্কিত একটি ফ্রেমের তাৎক্ষণিক সন্তান। উদাহরণস্বরূপ, ফ্রেম হায়ারার্কি A -> B -> C (যেখানে সমস্ত ক্রস-অরিজিন) সহ, A এর সাথে সম্পর্কিত টার্গেটের জন্য Target.setAutoAttach কল করার ফলে সেশনটি B এর সাথেও সংযুক্ত হবে। তবে, এটি পুনরাবৃত্তিমূলক নয়, তাই C এর সাথে সেশন সংযুক্ত করার জন্য B এর জন্য Target.setAutoAttach কল করতে হবে।
উদাহরণ
এই API ব্যবহার করে দেখতে, chrome-extension-samples সংগ্রহস্থল থেকে ডিবাগার API উদাহরণটি ইনস্টল করুন।
প্রকারভেদ
Debuggee
ডিবাগ আইডেন্টিফায়ার। tabId, extensionId অথবা targetId উল্লেখ করতে হবে।
বৈশিষ্ট্য
- এক্সটেনশন আইডি
স্ট্রিং ঐচ্ছিক
আপনি যে এক্সটেনশনটি ডিবাগ করতে চান তার আইডি। এক্সটেনশন ব্যাকগ্রাউন্ড পৃষ্ঠায় সংযুক্ত করা কেবল তখনই সম্ভব যখন
--silent-debugger-extension-apiকমান্ড-লাইন সুইচ ব্যবহার করা হয়। - ট্যাবআইডি
সংখ্যা ঐচ্ছিক
আপনি যে ট্যাবটি ডিবাগ করতে চান তার আইডি।
- টার্গেট আইডি
স্ট্রিং ঐচ্ছিক
ডিবাগ টার্গেটের অস্বচ্ছ আইডি।
DebuggerSession
ডিবাগার সেশন আইডেন্টিফায়ার। tabId, extensionId অথবা targetId এর যেকোনো একটি নির্দিষ্ট করতে হবে। অতিরিক্তভাবে, একটি ঐচ্ছিক sessionId প্রদান করা যেতে পারে। যদি onEvent থেকে প্রেরিত আর্গুমেন্টের জন্য sessionId নির্দিষ্ট করা থাকে, তাহলে এর অর্থ হল ইভেন্টটি রুট ডিবাগি সেশনের মধ্যে একটি চাইল্ড প্রোটোকল সেশন থেকে আসছে। যদি sendCommand এ পাস করার সময় sessionId নির্দিষ্ট করা থাকে, তাহলে এটি রুট ডিবাগি সেশনের মধ্যে একটি চাইল্ড প্রোটোকল সেশনকে লক্ষ্য করে।
বৈশিষ্ট্য
- এক্সটেনশন আইডি
স্ট্রিং ঐচ্ছিক
আপনি যে এক্সটেনশনটি ডিবাগ করতে চান তার আইডি। এক্সটেনশন ব্যাকগ্রাউন্ড পৃষ্ঠায় সংযুক্ত করা কেবল তখনই সম্ভব যখন
--silent-debugger-extension-apiকমান্ড-লাইন সুইচ ব্যবহার করা হয়। - সেশন আইডি
স্ট্রিং ঐচ্ছিক
Chrome DevTools প্রোটোকল সেশনের অস্বচ্ছ আইডি। tabId, extensionId অথবা targetId দ্বারা চিহ্নিত রুট সেশনের মধ্যে একটি চাইল্ড সেশন শনাক্ত করে।
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
আপনি যে ট্যাবটি ডিবাগ করতে চান তার আইডি।
- টার্গেট আইডি
স্ট্রিং ঐচ্ছিক
ডিবাগ টার্গেটের অস্বচ্ছ আইডি।
DetachReason
সংযোগ বিচ্ছিন্ন করার কারণ।
এনাম
"লক্ষ্য_বন্ধ" "ব্যবহারকারীর_দ্বারা_বাতিল করা হয়েছে"
TargetInfo
লক্ষ্য তথ্য ডিবাগ করুন
বৈশিষ্ট্য
- সংযুক্ত
বুলিয়ান
ডিবাগার ইতিমধ্যেই সংযুক্ত থাকলে সত্য।
- এক্সটেনশন আইডি
স্ট্রিং ঐচ্ছিক
এক্সটেনশন আইডি, যদি টাইপ = 'background_page' হয় তাহলে সংজ্ঞায়িত করা হয়।
- ফেভিকন ইউআরএল
স্ট্রিং ঐচ্ছিক
লক্ষ্য ফেভিকন URL।
- আইডি
স্ট্রিং
লক্ষ্য আইডি।
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
ট্যাব আইডি, যদি == 'পৃষ্ঠা' টাইপ করা হয় তাহলে সংজ্ঞায়িত করা হয়।
- শিরোনাম
স্ট্রিং
লক্ষ্য পৃষ্ঠার শিরোনাম।
- টাইপ করুন
লক্ষ্য প্রকার।
- ইউআরএল
স্ট্রিং
লক্ষ্য URL।
TargetInfoType
লক্ষ্য প্রকার।
এনাম
"পৃষ্ঠা" "পটভূমি_পৃষ্ঠা" "কর্মী" "অন্যান্য"
পদ্ধতি
attach()
chrome.debugger.attach(
target: Debuggee,
requiredVersion: string,
): Promise<void>
প্রদত্ত লক্ষ্যবস্তুতে ডিবাগার সংযুক্ত করে।
পরামিতি
- লক্ষ্য
আপনি যে টার্গেটের সাথে সংযুক্ত করতে চান সেটি ডিবাগ করা হচ্ছে।
- প্রয়োজনীয় সংস্করণ
স্ট্রিং
প্রয়োজনীয় ডিবাগিং প্রোটোকল সংস্করণ ("0.1")। কেবলমাত্র মেজর সংস্করণ এবং বৃহত্তর বা সমান মাইনর সংস্করণের সাথে মিল থাকলেই ডিবাগিতে সংযুক্ত করা যাবে। প্রোটোকল সংস্করণের তালিকা এখানে পাওয়া যাবে।
রিটার্নস
প্রতিশ্রুতি<অকার্যকর>
ক্রোম ৯৬+সংযুক্তি অপারেশন সফল বা ব্যর্থ হলে সমাধান হয়। প্রতিশ্রুতির কোনও মূল্য থাকে না। সংযুক্তি ব্যর্থ হলে, প্রতিশ্রুতি বাতিল করা হবে।
detach()
chrome.debugger.detach(
target: Debuggee,
): Promise<void>
প্রদত্ত লক্ষ্য থেকে ডিবাগার বিচ্ছিন্ন করে।
পরামিতি
- লক্ষ্য
আপনি যে লক্ষ্য থেকে বিচ্ছিন্ন করতে চান তা ডিবাগ করা হচ্ছে।
রিটার্নস
প্রতিশ্রুতি<অকার্যকর>
ক্রোম ৯৬+ডিটাচ অপারেশন সফল বা ব্যর্থ হলে সমাধান হয়। প্রতিশ্রুতির কোনও মূল্য থাকে না। যদি ডিটাচ ব্যর্থ হয়, তাহলে প্রতিশ্রুতি প্রত্যাখ্যান করা হবে।
getTargets()
chrome.debugger.getTargets(): Promise<TargetInfo[]>
উপলব্ধ ডিবাগ লক্ষ্যগুলির তালিকা প্রদান করে।
রিটার্নস
প্রতিশ্রুতি< টার্গেটইনফো []>
ক্রোম ৯৬+
sendCommand()
chrome.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
): Promise<object | undefined>
প্রদত্ত কমান্ড ডিবাগিং টার্গেটে পাঠায়।
পরামিতি
- লক্ষ্য
আপনি যে লক্ষ্যে কমান্ড পাঠাতে চান সেটি ডিবাগ করা হচ্ছে।
- পদ্ধতি
স্ট্রিং
পদ্ধতির নাম। এটি রিমোট ডিবাগিং প্রোটোকল দ্বারা সংজ্ঞায়িত পদ্ধতিগুলির মধ্যে একটি হওয়া উচিত।
- কমান্ড প্যারাম
ঐচ্ছিক বস্তু
অনুরোধ প্যারামিটার সহ JSON অবজেক্ট। এই অবজেক্টটি অবশ্যই প্রদত্ত পদ্ধতির জন্য রিমোট ডিবাগিং প্যারামিটার স্কিমের সাথে সঙ্গতিপূর্ণ হতে হবে।
রিটার্নস
প্রতিশ্রুতি<বস্তু | অনির্ধারিত>
ক্রোম ৯৬+প্রতিক্রিয়ার মূল অংশ। বার্তা পোস্ট করার সময় যদি কোনও ত্রুটি দেখা দেয়, তাহলে প্রতিশ্রুতি বাতিল করা হবে।
ইভেন্টগুলি
onDetach
chrome.debugger.onDetach.addListener(
callback: function,
)
ব্রাউজার যখন ট্যাবের জন্য ডিবাগিং সেশন বন্ধ করে দেয় তখন এটি চালু হয়। এটি তখন ঘটে যখন ট্যাবটি বন্ধ করা হচ্ছে অথবা সংযুক্ত ট্যাবের জন্য Chrome DevTools চালু করা হচ্ছে।
পরামিতি
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এরকম:(source: Debuggee, reason: DetachReason) => void
- উৎস
- কারণ
onEvent
chrome.debugger.onEvent.addListener(
callback: function,
)
যখনই টার্গেট ডিবাগিং ইন্সট্রুমেন্টেশন ইভেন্টের সমস্যা করে তখনই ফায়ার করা হয়।
পরামিতি
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এরকম:(source: DebuggerSession, method: string, params?: object) => void
- উৎস
- পদ্ধতি
স্ট্রিং
- প্যারামিটার
ঐচ্ছিক বস্তু