| OLD | NEW |
| 1 <h1>Extending DevTools</h1> | 1 <h1>Extending DevTools</h1> |
| 2 | 2 |
| 3 <h2 id="overview">Overview</h2> | 3 <h2 id="overview">Overview</h2> |
| 4 | 4 |
| 5 <p>A DevTools extension adds functionality to the Chrome DevTools. It can add ne
w | 5 <p>A DevTools extension adds functionality to the Chrome DevTools. It can add ne
w |
| 6 UI panels and sidebars, interact with the inspected page, get information about | 6 UI panels and sidebars, interact with the inspected page, get information about |
| 7 network requests, and more. DevTools extensions have access to an additional set | 7 network requests, and more. DevTools extensions have access to an additional set |
| 8 of DevTools-specific extension APIs:</p> | 8 of DevTools-specific extension APIs:</p> |
| 9 | 9 |
| 10 <ul> | 10 <ul> |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 var backgroundPageConnection = chrome.runtime.connect({ | 354 var backgroundPageConnection = chrome.runtime.connect({ |
| 355 name: "panel" | 355 name: "panel" |
| 356 }); | 356 }); |
| 357 | 357 |
| 358 backgroundPageConnection.postMessage({ | 358 backgroundPageConnection.postMessage({ |
| 359 name: 'init', | 359 name: 'init', |
| 360 tabId: chrome.devtools.inspectedWindow.tabId | 360 tabId: chrome.devtools.inspectedWindow.tabId |
| 361 }); | 361 }); |
| 362 </pre> | 362 </pre> |
| 363 | 363 |
| 364 |
| 365 <h3 id="evaluated-scripts-to-devtools">Messaging from Injected Scripts to the De
vTools Page</h3> |
| 366 |
| 367 <p>While the above solution works for content scripts, code that is injected |
| 368 directly into the page (e.g. through appending a <code><script></code> tag |
| 369 or through <code>$(ref:inspectedWindow.eval)</code>) requires a different strate
gy. |
| 370 In this context, <code>$(ref:runtime.sendMessage)</code> will not pass messages |
| 371 to the background script as expected.</p> |
| 372 |
| 373 <p>As a workaround, you can combine your injected script with a content script |
| 374 that acts as an intermediary. To pass messages to the content script, you can |
| 375 use the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window.postMes
sage"> |
| 376 <code>window.postMessage</code></a> API. Here's an example, assuming the |
| 377 background script from the previous section:</p> |
| 378 |
| 379 <pre> |
| 380 // injected-script.js |
| 381 |
| 382 window.postMessage({ |
| 383 greeting: 'hello there!', |
| 384 source: 'my-devtools-extension' |
| 385 }, '*'); |
| 386 </pre> |
| 387 |
| 388 <pre> |
| 389 // content-script.js |
| 390 |
| 391 window.addEventListener('message', function(event) { |
| 392 // Only accept messages from the same frame |
| 393 if (event.source !== window) { |
| 394 return; |
| 395 } |
| 396 |
| 397 var message = event.data; |
| 398 |
| 399 // Only accept messages that we know are ours |
| 400 if (typeof message !== 'object' || message === null || |
| 401 !message.source === 'my-devtools-extension') { |
| 402 return; |
| 403 } |
| 404 |
| 405 chrome.runtime.sendMessage(message); |
| 406 }); |
| 407 </pre> |
| 408 |
| 409 Your message will now flow from the injected script, to the content script, to |
| 410 the background script, and finally to the DevTools page. |
| 411 |
| 364 <h3 id="detecting-open-close">Detecting When DevTools Opens and Closes</h3> | 412 <h3 id="detecting-open-close">Detecting When DevTools Opens and Closes</h3> |
| 365 | 413 |
| 366 <p>If your extension needs to track whether the DevTools window is open, you can | 414 <p>If your extension needs to track whether the DevTools window is open, you can |
| 367 add an $(ref:runtime.onConnect onConnect) listener to the background page, and c
all | 415 add an $(ref:runtime.onConnect onConnect) listener to the background page, and c
all |
| 368 $(ref:runtime.connect connect) from the DevTools page. Since each tab can have i
ts | 416 $(ref:runtime.connect connect) from the DevTools page. Since each tab can have i
ts |
| 369 own DevTools window open, you may receive multiple connect events. To track whet
her | 417 own DevTools window open, you may receive multiple connect events. To track whet
her |
| 370 any DevTools window is open, you need to count the connect and disconnect events
as | 418 any DevTools window is open, you need to count the connect and disconnect events
as |
| 371 shown below:</p> | 419 shown below:</p> |
| 372 | 420 |
| 373 <pre>// background.js | 421 <pre>// background.js |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 <p> | 457 <p> |
| 410 <a href="http://groups.google.com/group/google-chrome-developer-tools/topics">Gi
ve | 458 <a href="http://groups.google.com/group/google-chrome-developer-tools/topics">Gi
ve |
| 411 us feedback!</a> | 459 us feedback!</a> |
| 412 Your comments and suggestions help us improve the APIs.</p> | 460 Your comments and suggestions help us improve the APIs.</p> |
| 413 | 461 |
| 414 <h2 id="examples">Examples</h2> | 462 <h2 id="examples">Examples</h2> |
| 415 | 463 |
| 416 <p>You can find examples that use DevTools APIs in | 464 <p>You can find examples that use DevTools APIs in |
| 417 <a href="http://developer.chrome.com/extensions/samples.html#devtools">Samples</
a>. | 465 <a href="http://developer.chrome.com/extensions/samples.html#devtools">Samples</
a>. |
| 418 </p> | 466 </p> |
| OLD | NEW |