বর্ণনা
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 }]
});
স্বয়ংক্রিয়-সংযুক্তি শুধুমাত্র সেই ফ্রেমের সাথে সংযুক্ত করে যেটি লক্ষ্য সম্পর্কে সচেতন, যা ফ্রেমের মধ্যে সীমাবদ্ধ যা এটির সাথে যুক্ত একটি ফ্রেমের তাৎক্ষণিক শিশু। উদাহরণস্বরূপ, A -> B -> C (যেখানে সবগুলোই ক্রস-অরিজিন) ফ্রেমের অনুক্রমের সাথে, A-এর সাথে যুক্ত টার্গেটের জন্য Target.setAutoAttach কল করার ফলে সেশনটি B-এর সাথে সংযুক্ত হবে। তবে, এটি পুনরাবৃত্তিমূলক নয়, তাই C-এর সাথে সেশন সংযুক্ত করার জন্য Target.setAutoAttach কেও B-কে ডাকতে হবে।
উদাহরণ
এই APIটি চেষ্টা করতে, chrome-extension-samples repository থেকে ডিবাগার API উদাহরণটি ইনস্টল করুন।
প্রকারভেদ
Debuggee
ডিবাগী শনাক্তকারী। হয় tabId, extensionId বা targetId অবশ্যই উল্লেখ করতে হবে
বৈশিষ্ট্য
- এক্সটেনশন আইডি
স্ট্রিং ঐচ্ছিক
আপনি ডিবাগ করতে চান এমন এক্সটেনশনের আইডি। একটি এক্সটেনশন ব্যাকগ্রাউন্ড পৃষ্ঠায় সংযুক্ত করা শুধুমাত্র তখনই সম্ভব যখন
--silent-debugger-extension-apiকমান্ড-লাইন সুইচ ব্যবহার করা হয়। - ট্যাবআইডি
সংখ্যা ঐচ্ছিক
ট্যাবের আইডি যা আপনি ডিবাগ করতে চান।
- টার্গেটআইডি
স্ট্রিং ঐচ্ছিক
ডিবাগ টার্গেটের অস্বচ্ছ আইডি।
DebuggerSession
ডিবাগার সেশন শনাক্তকারী। ট্যাবআইডি, এক্সটেনশনআইডি বা টার্গেটআইডির মধ্যে একটি অবশ্যই উল্লেখ করতে হবে। উপরন্তু, একটি ঐচ্ছিক সেশনআইডি প্রদান করা যেতে পারে। যদি onEvent থেকে প্রেরিত আর্গুমেন্টের জন্য sessionId নির্দিষ্ট করা হয়, তাহলে এর অর্থ হল ইভেন্টটি রুট ডিবাগি সেশনের মধ্যে একটি চাইল্ড প্রোটোকল সেশন থেকে আসছে। sendCommand এ পাস করার সময় সেশনআইডি নির্দিষ্ট করা হলে, এটি রুট ডিবাগি সেশনের মধ্যে একটি চাইল্ড প্রোটোকল সেশনকে লক্ষ্য করে।
বৈশিষ্ট্য
- এক্সটেনশন আইডি
স্ট্রিং ঐচ্ছিক
আপনি ডিবাগ করতে চান এমন এক্সটেনশনের আইডি। একটি এক্সটেনশন ব্যাকগ্রাউন্ড পৃষ্ঠায় সংযুক্ত করা শুধুমাত্র তখনই সম্ভব যখন
--silent-debugger-extension-apiকমান্ড-লাইন সুইচ ব্যবহার করা হয়। - সেশন আইডি
স্ট্রিং ঐচ্ছিক
Chrome DevTools প্রোটোকল সেশনের অস্বচ্ছ আইডি। tabId, extensionId বা targetId দ্বারা চিহ্নিত রুট সেশনের মধ্যে একটি চাইল্ড সেশন সনাক্ত করে৷
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
ট্যাবের আইডি যা আপনি ডিবাগ করতে চান।
- টার্গেটআইডি
স্ট্রিং ঐচ্ছিক
ডিবাগ টার্গেটের অস্বচ্ছ আইডি।
DetachReason
সংযোগ বন্ধ করার কারণ।
এনাম
"লক্ষ্য_বন্ধ" "ব্যবহারকারী_দ্বারা_বাতিল"
TargetInfo
লক্ষ্য তথ্য ডিবাগ করুন
বৈশিষ্ট্য
- সংযুক্ত
বুলিয়ান
ডিবাগার ইতিমধ্যে সংযুক্ত থাকলে সত্য।
- এক্সটেনশন আইডি
স্ট্রিং ঐচ্ছিক
এক্সটেনশন আইডি, সংজ্ঞায়িত যদি প্রকার = 'ব্যাকগ্রাউন্ড_পৃষ্ঠা'।
- faviconUrl
স্ট্রিং ঐচ্ছিক
টার্গেট ফেভিকন URL.
- আইডি
স্ট্রিং
টার্গেট আইডি।
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
ট্যাব আইডি, সংজ্ঞায়িত যদি টাইপ == 'পৃষ্ঠা'।
- শিরোনাম
স্ট্রিং
লক্ষ্য পৃষ্ঠা শিরোনাম.
- প্রকার
টার্গেট টাইপ।
- url
স্ট্রিং
লক্ষ্য URL.
TargetInfoType
টার্গেট টাইপ।
এনাম
"পৃষ্ঠা" "পটভূমি_পৃষ্ঠা" "কর্মী" "অন্য"
পদ্ধতি
attach()
chrome.debugger.attach(
target: Debuggee,
requiredVersion: string,
): Promise<void>
প্রদত্ত লক্ষ্যে ডিবাগার সংযুক্ত করে।
পরামিতি
- লক্ষ্য
ডিবাগিং টার্গেট যা আপনি সংযুক্ত করতে চান।
- প্রয়োজনীয় সংস্করণ
স্ট্রিং
প্রয়োজনীয় ডিবাগিং প্রোটোকল সংস্করণ ("0.1")। কেউ শুধুমাত্র মেজর মেজর ভার্সন এবং বৃহত্তর বা সমান ছোট সংস্করণের সাথে ডিবাগীর সাথে সংযুক্ত করতে পারে। প্রোটোকল সংস্করণের তালিকা এখানে পাওয়া যাবে।
রিটার্নস
প্রতিশ্রুতি <void>
Chrome 96+
detach()
chrome.debugger.detach(
target: Debuggee,
): Promise<void>
প্রদত্ত লক্ষ্য থেকে ডিবাগারকে বিচ্ছিন্ন করে।
পরামিতি
- লক্ষ্য
ডিবাগিং টার্গেট যা থেকে আপনি বিচ্ছিন্ন করতে চান।
রিটার্নস
প্রতিশ্রুতি <void>
Chrome 96+
getTargets()
chrome.debugger.getTargets(): Promise<TargetInfo[]>
উপলব্ধ ডিবাগ লক্ষ্যগুলির তালিকা প্রদান করে।
রিটার্নস
প্রতিশ্রুতি< TargetInfo []>
Chrome 96+
sendCommand()
chrome.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
): Promise<object | undefined>
ডিবাগিং টার্গেটে প্রদত্ত কমান্ড পাঠায়।
পরামিতি
- লক্ষ্য
ডিবাগিং টার্গেট যেখানে আপনি কমান্ড পাঠাতে চান।
- পদ্ধতি
স্ট্রিং
পদ্ধতির নাম। দূরবর্তী ডিবাগিং প্রোটোকল দ্বারা সংজ্ঞায়িত পদ্ধতিগুলির মধ্যে একটি হওয়া উচিত।
- কমান্ড প্যারামস
বস্তু ঐচ্ছিক
অনুরোধ পরামিতি সহ JSON অবজেক্ট। এই বস্তুটিকে প্রদত্ত পদ্ধতির জন্য দূরবর্তী ডিবাগিং প্যারাম স্কিমের সাথে সঙ্গতিপূর্ণ করতে হবে।
রিটার্নস
প্রতিশ্রুতি <অবজেক্ট | undefined>
Chrome 96+
ঘটনা
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
- উৎস
- পদ্ধতি
স্ট্রিং
- params
বস্তু ঐচ্ছিক