| Index: chrome/common/extensions/docs/static/overview.html
|
| ===================================================================
|
| --- chrome/common/extensions/docs/static/overview.html (revision 27015)
|
| +++ chrome/common/extensions/docs/static/overview.html (working copy)
|
| @@ -2,14 +2,12 @@
|
| <div id="pageData-showTOC" class="pageData">true</div>
|
|
|
| <p>
|
| -Please read this page;
|
| -it has vital information about the extension architecture.
|
| -If you get bored or restless,
|
| -take a break!
|
| -We suggest bouncing between this page
|
| -and tutorials
|
| -such as <a href="getstarted.html">Getting Started</a>
|
| -and <a href="tut_debugging.html">Debugging</a>.
|
| +Read this page!
|
| +It has vital information about the extension architecture.
|
| +Once you've finished this page
|
| +and the
|
| +<a href="getstarted.html">Getting Started</a> tutorial,
|
| +you'll be all set to start writing extensions.
|
| </p>
|
|
|
|
|
| @@ -19,30 +17,34 @@
|
| An extension is a zipped bundle of files —
|
| HTML, CSS, JavaScript, images, and anything else you need —
|
| that adds functionality to the Google Chrome browser.
|
| -Because an extension is just a special kind of web page,
|
| -it can use all the APIs
|
| +Extensions are essentially web pages,
|
| +and they can use all the APIs
|
| that the browser provides
|
| -to web pages and apps,
|
| -from XMLHttpRequest to JSON to localStorage.
|
| +to web pages,
|
| +from XMLHttpRequest to JSON to HTML5 local storage.
|
| </p>
|
|
|
| <p>
|
| -Extensions can add UI to Google Chrome,
|
| +Many extensions add UI to Google Chrome,
|
| in the form of
|
| <a href="toolstrip.html">toolstrips</a> (toolbar additions)
|
| -and <a href="pageActions.html">page actions</a>
|
| +or <a href="pageActions.html">page actions</a>
|
| (clickable badges in the address bar).
|
| Extensions can also interact programmatically
|
| with browser features such as
|
| <a href="bookmarks.html">bookmarks</a>
|
| and <a href="tabs.html">tabs</a>.
|
| +To interact with web pages or servers,
|
| +extensions can use
|
| +<a href="content_scripts.html">content scripts</a> or
|
| +<a href="xhr.html">cross-origin XMLHttpRequests</a>.
|
| </p>
|
|
|
| <p>
|
| -To find a complete list of extension features,
|
| +See the <a href="devguide.html">Developer's Guide</a>
|
| +for a complete list of extension features,
|
| with implementation details
|
| -for each one,
|
| -see the <a href="devguide.html">Developer's Guide</a>.
|
| +for each one.
|
| </p>
|
|
|
|
|
| @@ -56,14 +58,15 @@
|
| <li>A <b>manifest file</b></li>
|
| <li>One or more <b>HTML files</b> (unless the extension is a theme)</li>
|
| <li><em>Optional:</em> One or more <b>JavaScript files</b></li>
|
| - <li><em>Optional:</em> Any other files your extension needs — for example, image files</li>
|
| + <li><em>Optional:</em> Any other files your extension needs —
|
| + for example, image files</li>
|
| </ul>
|
|
|
| <p>
|
| While you're working on your extension,
|
| you put all these files into a single folder.
|
| When you distribute your extension,
|
| -the contents of the folder are packaged into a special zipfile
|
| +the contents of the folder are packaged into a special ZIP file
|
| that has a <code>.crx</code> suffix,
|
| as described in <a href="packaging.html">Packaging</a>.
|
| </p>
|
| @@ -83,7 +86,7 @@
|
| </p>
|
|
|
| <pre>
|
| -<img <b>src="images/myimage.png"</b> style="width:auto; height:auto">
|
| +<img <b>src="images/myimage.png"</b>>
|
| </pre>
|
|
|
| <p>
|
| @@ -105,73 +108,13 @@
|
| it's the same as the relative URL.
|
| </p>
|
|
|
| -<p>
|
| -For example, assume your extension has
|
| -the ID <b>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</b>
|
| -and the files shown in the following figure:
|
| +<p class="comment">
|
| +[PENDING: Should mention/reflect/link to
|
| +<a href="http://dev.chromium.org/developers/design-documents/extensions/i18n">internationalization</a>
|
| +when it's ready.]
|
| </p>
|
|
|
| -<pre>
|
| -<span class="tbd">[PENDING: someday this will be a real figure]</span>
|
| -toolstrip.html
|
| -styles.css
|
| -images:
|
| - myimage.png
|
| - ...
|
| -other:
|
| - more.html
|
| - morestyles.css
|
| - ...
|
| -</pre>
|
|
|
| -<p>
|
| -Here's a table that shows the relative and absolute URLs of these files.
|
| -Keep in mind that the relative URL is the same no matter where you're using it —
|
| -the relative URL of <code>myimage.png</code> is
|
| -<b>images/myimage.png</b>,
|
| -no matter whether it's being used by
|
| -<code>toolstrip.html</code> or <code>other/more.html</code>.
|
| -</p>
|
| -
|
| -<table>
|
| -<tr>
|
| - <th> File </th>
|
| - <th> Relative URL </th>
|
| - <th> Absolute URL </th>
|
| -</tr>
|
| -<tr>
|
| - <td> toolstrip.html </td>
|
| - <td> toolstrip.html </td>
|
| - <td> chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/toolstrip.html </td>
|
| -</tr>
|
| -<tr>
|
| - <td> styles.css </td>
|
| - <td> styles.css </td>
|
| - <td> chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/styles.css </td>
|
| -</tr>
|
| -<tr>
|
| - <td> myimage.png </td>
|
| - <td> images/myimage.png </td>
|
| - <td> chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/images/myimage.png </td>
|
| -</tr>
|
| -<tr>
|
| - <td> more.html </td>
|
| - <td> other/more.html </td>
|
| - <td> chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/other/more.html </td>
|
| -</tr>
|
| -<tr>
|
| - <td> morestyles.css </td>
|
| - <td> other/morestyles.css </td>
|
| - <td> chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/other/morestyles.css </td>
|
| -</tr>
|
| -</table>
|
| -
|
| -<p class="tbd">
|
| -[PENDING: Mention/reflect/link to
|
| -<a href="http://dev.chromium.org/developers/design-documents/extensions/i18n">internationalization</a>]
|
| -</p>
|
| -
|
| -
|
| <h3>The manifest file</h3>
|
|
|
| <p>
|
| @@ -201,65 +144,61 @@
|
| <h2 id="arch">Architecture</h2>
|
|
|
| <p>
|
| -The following pictures shows the web pages associated with a typical extension
|
| -(in this case, a simple toolstrip).
|
| -The first figure shows what an extension might look like
|
| +Remember that extensions are essentially web pages.
|
| +The following figure shows what
|
| +a simple extension with a toolstrip
|
| +might look like
|
| when there's a single browser window.
|
| +The toolstrip (T1) is at the bottom of the window.
|
| +The HTML and JavaScript code for T1
|
| +is in a web page
|
| +(<code>toolstrip.html</code>).
|
| </p>
|
|
|
| -<p class="tbd"> [PENDING: image goes here] </p>
|
| +<img src="images/arch-1.gif">
|
|
|
| <p>
|
| -The next figure shows that all the code in the extension's main HTML file
|
| -is duplicated each time you create a new window.
|
| -In other words, each window has its own widgets for the extension,
|
| -which means each window adds another web page for that extension.
|
| +Each time the user creates a new window,
|
| +the browser creates new toolstrips, page actions, and so on.
|
| +Each new bit of UI gets its own web page,
|
| +which means that toolstrips (for example)
|
| +that are in different windows can have different states.
|
| +In the following figure,
|
| +the two toolstrips (T1 and T2)
|
| +are associated with two separate web pages,
|
| +both of which contain code from <code>toolstrip.html</code>.
|
| +This means that although both toolstrips use the same code,
|
| +one can be blue while the other is green.
|
| </p>
|
|
|
| -<p class="tbd"> [PENDING: image goes here] </p>
|
| +<img src="images/arch-2.gif">
|
|
|
| +
|
| +<h3 id="background">The background page</h3>
|
| +
|
| <p>
|
| -To more easily coordinate all these web pages and to avoid duplication,
|
| -you should design your extension
|
| -so that most of the code —
|
| -especially the state of the extension —
|
| -is in a <em>background page</em>,
|
| -as shown in the following figure.
|
| +If your extension's web pages need to communicate
|
| +or otherwise share information —
|
| +for example, if a browser event
|
| +can affect more than just one window's toolstrip —
|
| +the extension can use a background page.
|
| +The following figure shows a background page
|
| +(<code>background.html</code>)
|
| +that controls
|
| +the toolstrips in an extension.
|
| </p>
|
|
|
| -<p class="tbd"> [PENDING: image goes here] </p>
|
| +<img src="images/arch-3.gif">
|
|
|
| -
|
| -<h3 id="background">The background page</h3>
|
| <p>
|
| -Any non-trivial extension can (and probably should)
|
| -have a background page.
|
| The background page is an invisible page
|
| -where you put the main logic of the extension.
|
| +where you can put the main logic of the extension.
|
| The extension's other pages should have
|
| only the code that's necessary
|
| to show the state of the extension
|
| and to get input from the user.</p>
|
|
|
| <p>
|
| -An extension's background page exists
|
| -before any of the extension's other pages exist.
|
| -It continues to exist as long as the browser is running
|
| -and the extension is installed,
|
| -even if other pages and windows go away.
|
| -</p>
|
| -
|
| -<p>
|
| -Your extension's UI —
|
| -its toolstrips, page actions, and so on —
|
| -should be dumb views.
|
| -When the view needs some state,
|
| -it should request it from the background page.
|
| -When the background page notices some state change,
|
| -it should update all the views.
|
| -</p>
|
| -
|
| -<p>
|
| For more information, see
|
| <a href="background_pages.html">Background Pages</a>.
|
| </p>
|
| @@ -267,18 +206,31 @@
|
| <h3 id="contentScripts">Content scripts</h3>
|
|
|
| <p>
|
| -If you want your extension to interact with web pages,
|
| -you need a content script.
|
| +If your extension needs to interact with web pages,
|
| +then it needs a <em>content script</em>.
|
| Content scripts are JavaScript files that run in the context of web pages.
|
| -By using the standard Document Object Model (DOM),
|
| -they can read details of the web pages the browser visits,
|
| +Using the standard
|
| +<a href="http://www.w3.org/TR/DOM-Level-2-HTML/">Document Object Model</a>
|
| +(DOM),
|
| +content scripts can read details of the web pages the browser visits,
|
| and they can make changes to the pages.
|
| </p>
|
|
|
| +<p>
|
| +In the following figure,
|
| +the content script
|
| +can read and modify
|
| +the DOM for the web page displayed in Window 1.
|
| +If the toolstrip's UI needs to change
|
| +to reflect the web page's contents,
|
| +the content script can request that change
|
| +by sending a message to the parent extension.
|
| +</p>
|
| +
|
| +<img src="images/arch-cs.gif">
|
| +
|
| <p class="comment">
|
| -[PENDING: add an architectural figure here,
|
| -showing the extension's pages, a web page, and the content script
|
| -interacting with the web page. explain the figure.]
|
| +[PENDING: Add overview of message passing.]
|
| </p>
|
|
|
| <p>
|
| @@ -287,65 +239,37 @@
|
| </p>
|
|
|
|
|
| -<h2>Communication </h2>
|
| +<h2>Communication between pages </h2>
|
|
|
| <p>
|
| -Two kinds of communication happen within an extension:
|
| +The HTML pages within an extension often need to communicate.
|
| +An example is when the background page tells
|
| +UI pages (such as toolstrips)
|
| +to update their appearance.
|
| +Because all of an extension's pages
|
| +execute in same process on the same thread,
|
| +the pages can make direct function calls to each other.
|
| </p>
|
|
|
| -<ul>
|
| - <li>
|
| - Communication <b>between pages</b> in the extension.
|
| - <br />
|
| - For example, sometimes the background page
|
| - needs to update all the UI pages
|
| - to reflect a change in the extension's state.
|
| - </li>
|
| - <li>
|
| - Communication <b>between content scripts and the extension</b>.
|
| - <br />
|
| - For example,
|
| - <span class="tbd">[PENDING: typical use case goes here]</span>.
|
| - See <a href="content_scripts.html">Content Scripts</a>
|
| - for information about this type of communication.
|
| - </li>
|
| -</ul>
|
| -
|
| <p>
|
| -Here are some keys to communication between an extension's pages:
|
| +To find pages in the extension, use
|
| +<a href="extension.html"><code>chrome.extension</code></a>
|
| +methods such as
|
| +<code>getViews()</code>,
|
| +<code>getBackgroundPage()</code>,
|
| +and <code>getToolstrips()</code>.
|
| +Once a page has a reference to other pages within the extension,
|
| +the first page can invoke functions on the other pages.
|
| +It can even manipulate their DOMs.
|
| </p>
|
|
|
| -<ul>
|
| - <li>
|
| - All the extension's pages execute in same process,
|
| - on the same thread.
|
| - </li>
|
| - <li>
|
| - Extension pages can use
|
| - <a href="extension.html"><code>chrome.extension</code></a>
|
| - methods such as
|
| - <code>getViews()</code>,
|
| - <code>getBackgroundPage()</code>,
|
| - and <code>getToolstrips()</code>
|
| - to get access to the extension's pages.
|
| - </li>
|
| - <li>
|
| - Once you have references to an extension's pages,
|
| - you can manipulate the DOM for each page.
|
| - </li>
|
| - <li>
|
| - You can also make direct function calls to the pages,
|
| - as shown in the following example.
|
| - </li>
|
| -</ul>
|
| -
|
| <p>
|
| Here's an example of
|
| communication between toolstrips and the background page.
|
| </p>
|
|
|
| <pre>
|
| -//In background_page.html:
|
| +//In background.html:
|
| function updateUI(checked) {
|
| var toolstrips = chrome.extension.getToolstrips();
|
| for (var i in toolstrips) {
|
|
|