この記事では、カスタム DevTools サンプルのコードについて説明します。 最初にサンプルをインストールして実行するには、「 サンプル: カスタム DevTools ツール」を参照してください。
概要
通常の拡張機能と同様に、DevTools 拡張機能にはマニフェスト ファイルがあります。 これについては、「 拡張機能の開発を開始する」で説明されています。これには、開始できる基本的な拡張機能のサンプルが示されています。
DevTools を拡張する拡張機能には、次のものが含まれます。
- DevTools のツールのパネルに表示するレンダリングされた HTML ファイル。
- DevTools が開かれたときに実行される非レンダリング HTML ファイル。通常は、カスタム DevTools ツールと検査対象の Web ページ間の通信を処理します。
この DevTools 拡張機能サンプルは、DevTools と検査対象の Web ページの間で通信し、DevTools API を呼び出します。
DevTools 拡張機能のサンプルには、アクティビティ バーのカスタム タブとタブに接続されたパネルなど、DevTools のカスタム ツールが表示されます。
パネルは、Microsoft Edge DevTools のツール ページであり、アクティビティ バーのツールのタブもあります。
関連項目:
ファイルの概要
DevTools 拡張機能サンプルには、次のファイルが含まれています。
| ファイル | 説明 |
|---|---|
manifest.json |
拡張機能に関する情報: 名前、説明、バージョン、マニフェスト バージョン、DevTools に表示する HTML ページ。 |
panel.html |
DevTools のカスタム パネルに表示する Web ページ。 |
devtools.html |
拡張機能の JavaScript ファイルを読み込むために DevTools を開くときに実行される、レンダリングされていない HTML ファイル。 |
devtools.js |
カスタム DevTools ページの主なロジック。 |
content_script.js |
拡張機能が検査対象の Web ページに挿入するコード。 マウス クリック位置でメッセージを送信するページにクリック イベント リスナーを追加します。
devtools.js このメッセージを聞き、カスタム パネルに位置を表示します。 |
icon.png |
DevTools のアクティビティ バーにあるツールのタブと、[ その他のツール ] メニューに表示するアイコン。 |
README.md |
サンプルの使用方法に関する開発者向けの基本情報。 |
詳細は以下です。
Web ページと DevTools 間の対話
検査対象の Web ページと DevTools 間の相互作用を有効にするには、複数のファイルが必要です。 これらのファイルは、さまざまなコンテキストで実行されます。
devtools.jsは、DevTools のカスタム ツール パネルのコンテキストで実行されます。content_script.jsは コンテンツ スクリプトです。つまり、検査対象の Web ページのコンテキストで実行されます。 他のスクリプトが Web ページによって読み込まれるのと同じように、コンテンツ スクリプトは DOM にアクセスでき、DOM を変更できます。
DevTools ページ、検査対象ページ、コンテンツ スクリプトは、拡張機能に組み合わされます。
content_script.jsは、検査対象の Web ページのユーザークリックした場所を検出します。
document.addEventListener("click", event => {
chrome.runtime.sendMessage({
click: true,
xPosition: event.clientX + document.body.scrollLeft,
yPosition: event.clientY + document.body.scrollTop
});
});
コンテンツ スクリプトによってこの情報が devtools.js ファイルに中継されます。このファイルでは、 データはカスタム ツールの DevTools と コンソール ツールに表示されます。
コンテンツ スクリプトを使用して、Web ページのユーザークリックを検出します。 コンテンツ スクリプトはこの情報を devtools.js ファイルに中継します。ここでデータは、DevTools コンソール と Microsoft Edge 拡張機能である DevTools カスタム ツールの両方に表示されます。
カスタム DevTools ツールのコード
カスタム DevTools サンプルは、次のファイルとコードで構成されています。 検査対象の Web ページと対話するコードは、次の処理を行います。
カスタム DevTools ツールでメモリ情報を表示します。
Web ページがクリックされたときの カスタム DevTools ツールでのマウス クリック位置を表示します。
カスタム DevTools ツールで [Say Hello] ボタンをクリックすると、検査対象の Web ページに案内通知が表示されます。
manifest.json
拡張機能に関する情報: 名前、説明、バージョン、マニフェスト バージョン、DevTools に表示する HTML ページ。
マニフェスト ファイルには、キーと値のペアが含まれています。 最上位のキーは メンバーと呼ばれます。
このファイルは拡張子に必要です。 マニフェストには、拡張機能に関する次の情報が含まれています。
| メンバー | 説明 |
|---|---|
name |
[ edge://extensions/] の下に表示される広告表示オプションの名前。 |
description |
拡張機能の名前の下に表示される拡張機能の説明。 |
version |
拡張機能の名前の横に表示される拡張機能のバージョン。 |
manifest_version |
ネットワーク要求の変更など、拡張機能が使用する機能セットを決定します。 現在のバージョンはバージョン 3 です。 このバージョンとバージョン 2 との違いの詳細については、「 マニフェスト V3 への移行のタイムライン」を参照してください。 |
devtools_page |
DevTools を開くたびに実行され、拡張機能の JavaScript ファイルを読み込む HTML ファイルへのパス。 このページは DevTools では表示されません。 |
content_scripts |
ユーザーが指定した Web ページを開くときに使用する JavaScript ファイルまたは CSS ファイル。 Chrome ドキュメントの コンテンツ スクリプト を参照してください。 |
permissions |
ローカル デバイスでは、システム メモリ容量を表示するためのアクセス許可が必要です。スクリプトはそのための API を呼び出すためです。 |
manifest.json:
{
"name": "Custom DevTools Tool",
"description": "A DevTools extension interacting with the inspected page",
"manifest_version": 3,
"version": "1.0",
"devtools_page": "devtools.html",
"content_scripts": [{
"matches": [
"http://*/*",
"https://*/*"
],
"run_at": "document_idle",
"js": [
"content_script.js"
]
}],
"permissions": [
"system.memory"
]
}
manifest.json のpermissions マニフェスト メンバーは、拡張機能がユーザーに必要とするアクセス許可を定義します。 特定の拡張機能 API を使用するには、いくつかのアクセス許可が必要です。 拡張機能 API を使用するには、 system-memory アクセス許可が必要です。 特定の API には、アクセス許可が関連付けられています。
content_scripts メンバー内のキー:
| キー | 値 |
|---|---|
matches |
このコンテンツ スクリプトが挿入されるページを指定します。 |
run_at |
ブラウザーがスクリプトをページに挿入するタイミングを示します。 |
js |
挿入される javascript ファイル。 |
関連項目:
- manifest.json - リポジトリ内のソース ファイル。
- 拡張機能 API リファレンス
panel.html
DevTools のカスタム パネルに表示する Web ページ。
このファイルは必須です。 これは、DevTools のカスタム パネルに表示する Web ページです。
panel.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<h2>Custom DevTools tool</h2>
<h3>Memory</h3>
<div>
<b>Available Memory Capacity:</b> <span id="availableMemoryCapacity"></span>
</div>
<div>
<b>Total Memory Capacity:</b> <span id="totalMemoryCapacity"></span>
</div>
<h3>Send message from DevTools to inspected page</h3>
<input type="button" id="sayHello" value="Say hello to the inspected page">
<h3>Send message from inspected page to DevTools</h3>
<p>Click somewhere in the inspected webpage.</p>
<div>
<b>Coordinates:</b> <span id="youClickedOn"></span>
</div>
</body>
</html>
panel.htmlは、devtools.js の chrome.devtools.panels.create メソッド呼び出しで参照されます。
panel.html Web ページには、カスタム ツールのパネルのユーザー インターフェイスが含まれています。
上記の要素は、検査対象ページと DevTools パネル間の相互作用を示しています。
ユーザーが DevTools 拡張機能の [ sayHello ] ボタンをクリックすると、検査対象ウィンドウに警告が表示されます。
ユーザーが検査対象ページの任意の場所をクリックすると、マウス クリック座標が DevTools カスタム ツールに表示されます。
関連項目:
- panel.html - リポジトリ内のソース ファイル。
devtools.html
DevTools が開かれたときに実行される、レンダリングされていない HTML ファイル。 このファイルは必須です。
ファイル名 devtools.html は、マニフェスト ファイル内の devtools_page メンバーの値と一致する必要があります。
devtools.html
devtools.jsを読み込む <script> 要素が含まれています。
devtools.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<script src="devtools.js"></script>
</body>
</html>
関連項目:
- devtools.html - リポジトリ内のソース ファイル。
devtools.js
devtools.js には、カスタム DevTools ページのメイン ロジックが含まれています。
devtools.js 次の操作を行います。
chrome.devtools.panels.create()を使用して、DevTools に新しいカスタム ツール タブとパネルを作成します。ツールが表示される (
panel.onShownリスナー) と、availableMemoryCapacity要素とtotalMemoryCapacity要素が DOM から取得されます。パネルが表示された後、毎秒コードを実行するタイマーを設定します。
タイマーが発生すると、
chrome.system.memory.getInfoメソッドを使用してデバイスの使用可能な合計メモリ容量が取得され、これらの値は対応する DOM 要素に表示されます。
devtools.js:
let availableMemoryCapacity;
let totalMemoryCapacity;
let youClickedOn;
chrome.devtools.panels.create("Custom", "icon.png", "panel.html", panel => {
// Code invoked on panel creation.
panel.onShown.addListener( (extPanelWindow) => {
// Memory API.
availableMemoryCapacity = extPanelWindow.document.querySelector('#availableMemoryCapacity');
totalMemoryCapacity = extPanelWindow.document.querySelector('#totalMemoryCapacity');
// 2-way message sending.
let sayHello = extPanelWindow.document.querySelector('#sayHello');
youClickedOn = extPanelWindow.document.querySelector('#youClickedOn');
sayHello.addEventListener("click", () => {
// show a greeting alert in the inspected page
chrome.devtools.inspectedWindow.eval('alert("Hello from the DevTools extension!");');
});
});
});
// Update the Memory display.
setInterval(() => {
chrome.system.memory.getInfo((data) => {
if (availableMemoryCapacity) {
availableMemoryCapacity.innerHTML = data.availableCapacity;
}
if (totalMemoryCapacity) {
totalMemoryCapacity.innerHTML = data.capacity;
}
});
}, 1000);
// Send a message from the inspected page to DevTools.
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
// Messages from content scripts should have sender.tab set.
if (sender.tab && request.click == true) {
console.log('I am here!');
if (youClickedOn) {
youClickedOn.innerHTML = `(${request.xPosition}, ${request.yPosition})`;
}
sendResponse({
xPosition: request.xPosition,
yPosition: request.yPosition
});
}
});
devtools.js でのcreateメソッド呼び出し:
chrome.devtools.panels.create("Custom", "icon.png", "panel.html", panel => {
// code invoked on panel creation
});
create メソッドには、次のシグネチャがあります。
chrome.devtools.panels.create(
title: string, // Tool tab's label in Activity bar.
iconPath: string, // Icon to display in tool's tab.
pagePath: string, // Webpage to display in tool's panel.
callback: function // Code to run when tool is opened.
)
検査対象の Web ページと通信するために、devtools.js はpanel.html ファイルで定義されているsayHello ボタンとラベルyouClickedOnイベント リスナーを追加します。
ユーザーが [ sayHello ] ボタンをクリックすると、 devtools.js は chrome.devtools.inspectedWindow.eval() メソッドを使用して、検査対象ウィンドウでコードを直接実行します。
ユーザーが検査対象ウィンドウ内の任意の場所をクリックすると、DevTools 拡張機能は request.click == true とマウスの位置情報を含むメッセージを受け取ります。
関連項目:
- devtools.js - リポジトリ内のソース ファイル。
- Microsoft Edge 拡張機能でサポートされている API
content_script.js
カスタム DevTools ツールによって検査対象の Web ページに挿入されるコード。 検査対象の Web ページ (任意の Web ページ) に挿入される JavaScript を含みます。
このファイルは次の処理を実行します。
-
chrome.runtime.sendMessageを呼び出すことにより、検査対象の Web ページにクリック イベント リスナーを追加して、マウスのクリック位置を含むメッセージを送信します。 - イベント リスナーを介してページ クリック イベントをリッスンします。
コンテンツ スクリプトは、マウス クリック座標を devtools.js ファイルに中継します。このファイルでは、 コンソール ツールと DevTools の カスタム ツールの両方に座標が表示されます。
コンテンツ スクリプトは、検査対象の Web ページのコンテキストで実行されます。 他のスクリプトが Web ページによって読み込まれるのと同じように、コンテンツ スクリプトは DOM にアクセスでき、DOM を変更できます。
content_script.js:
document.addEventListener("click", (event) => {
chrome.runtime.sendMessage({
click: true,
xPosition: event.clientX + document.body.scrollLeft,
yPosition: event.clientY + document.body.scrollTop
},
response => {
console.log("Received response", response);
}
);
});
関連項目:
- content_script.js - リポジトリ内のソース ファイル。
- コンテンツ スクリプト - Chrome ドキュメント
icon.png
DevTools のアクティビティ バーにあるツールのタブと、[ その他のツール ] メニューに表示するアイコン。
icon.png は、DevTools の アクティビティ バー にあるツールのタブと 、[その他のツール ] メニューに表示するアイコンです。
関連項目:
- icon.png - リポジトリ内のソース ファイル。
関連項目
- サンプル: カスタム DevTools ツール
- DevTools の概要
- マニフェスト V3 への移行のタイムライン
- Microsoft Edge 拡張機能でサポートされている API
- 拡張機能の開発を開始する
- サンプル: 画像ビューアーのポップアップ Web ページ
Chrome 拡張機能ドキュメント:
リポジトリ内のソース ファイル: