summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkurrik@chromium.org <kurrik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 00:05:25 +0000
committerkurrik@chromium.org <kurrik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-01 00:05:25 +0000
commitef7743403a4510864fd1430b7a221d60bd87e3da (patch)
tree5848951a44637f978246829c74885689090e15ba
parent6aea8fb0d1ed8de52b24f6d9056e3f17c5456d21 (diff)
downloadchromium_src-ef7743403a4510864fd1430b7a221d60bd87e3da.zip
chromium_src-ef7743403a4510864fd1430b7a221d60bd87e3da.tar.gz
chromium_src-ef7743403a4510864fd1430b7a221d60bd87e3da.tar.bz2
Reorganizing and updating the extensions FAQ.
* Added a new section named "Capabilities" * Moved the "Can I..." questions to capabilities section. * Added several new (frequently asked) questions. Note that I've purposely left the IDs of questions the same even if they changed sections, in case someone has linked to or bookmarked existing questions. Going forward I'll label FAQ entries with a descriptive name, instead of an ID based off of the entry's section. BUG=None TEST=None Review URL: http://codereview.chromium.org/6480057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76317 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/common/extensions/docs/faq.html312
-rw-r--r--chrome/common/extensions/docs/static/faq.html314
2 files changed, 396 insertions, 230 deletions
diff --git a/chrome/common/extensions/docs/faq.html b/chrome/common/extensions/docs/faq.html
index 245567f..4304f18 100644
--- a/chrome/common/extensions/docs/faq.html
+++ b/chrome/common/extensions/docs/faq.html
@@ -330,27 +330,37 @@ try the
<h4>General</h4>
<ul>
<li><a href="#faq-gen-01">What are Google Chrome Extensions?</a></li>
+ <li><a href="#faq-dev-01">How can I set up Chrome for extension development?</a></li>
<li><a href="#faq-gen-02">What technologies are used to write extensions for Chrome?</a></li>
<li><a href="#faq-gen-03">Are extensions fetched from the web every time the browser is loaded?</a></li>
+ <li><a href="#faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</a></li>
</ul>
- <h4>Development</h4>
+ <h4>Capabilities</h4>
<ul>
- <li><a href="#faq-dev-01">How can I set up Chrome for extension development?</a></li>
- <li><a href="#faq-dev-02">Can I make cross-domain Ajax requests in an extension?</a></li>
- <li><a href="#faq-dev-03">Can I use 3rd party web services in my extension?</a></li>
- <li><a href="#faq-dev-04">Can I use OAuth in my extensions?</a></li>
- <li><a href="#faq-dev-05">What UI controls can I create for my extension?</a></li>
- <li><a href="#faq-dev-06">Can I load DLLs in my extension?</a></li>
+ <li><a href="#faq-dev-02">Can extensions make cross-domain Ajax requests?</a></li>
+ <li><a href="#faq-dev-03">Can extensions use 3rd party web services?</a></li>
<li><a href="#faq-dev-07">Can extensions encode/decode JSON data?</a></li>
- <li><a href="#faq-dev-08">Can I store data locally in my extension?</a></li>
- <li><a href="#faq-dev-09">How much data can I store in localStorage?</a></li>
- <li><a href="#faq-dev-10">Can I create an options menu for my application?</a></li>
- <li><a href="#faq-dev-11">Can two extensions communicate with each other?</a></li>
- <li><a href="#faq-dev-12">What debugging tools are available to extension developers?</a></li>
+ <li><a href="#faq-dev-08">Can extensions store data locally?</a></li>
+ <li><a href="#faq-dev-04">Can extensions use OAuth?</a></li>
+ <li><a href="#faq-dev-06">Can extensions load DLLs?</a></li>
+ <li><a href="#faq-dev-05">Can extensions create UI outside of the rendered web page?</a></li>
+ <li><a href="#faq-interact-chrome">Can extensions listen to clicks on Chrome tabs and navigation buttons?</a>
+ </li><li><a href="#faq-dev-11">Can two extensions communicate with each other?</a></li>
<li><a href="#faq-dev-13">Can extensions use Google Analytics?</a></li>
- <li><a href="#faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</a></li>
- <li><a href="#faq-dev-15">Can I add a content script to chrome:// URLs?</a></li>
+ <li><a href="#faq-dev-15">Can extensions modify chrome:// URLs?</a></li>
+ <li><a href="#faq-open-popups">Can extensions open browser/page action popups without user interaction?</a></li>
+ <li><a href="#faq-persist-popups">Can extensions keep popups open after the user clicks away from them?</a></li>
+ <li><a href="#faq-lifecycle-events">Can extensions be notified when they are installed/uninstalled?</a></li>
+ </ul>
+ <h4>Development</h4>
+ <ul>
+ <li><a href="#faq-building-ui">How do I build a UI for my extension?</a>
+ </li><li><a href="#faq-dev-09">How much data can I store in localStorage?</a></li>
+ <li><a href="#faq-dev-10">How do I create an options menu for my application?</a></li>
+ <li><a href="#faq-dev-12">What debugging tools are available to extension developers?</a></li>
<li><a href="#faq-dev-16">Why do wildcard matches not work for top level domains (TLDs)?</a></li>
+ <li><a href="#faq-management">Why does the management API not fire events when my extension is installed/uninstalled?</a></li>
+ <li><a href="#faq-firstrun">How can an extension determine whether it is running for the first time?</a></li>
</ul>
<h4>Features and bugs</h4>
<ul>
@@ -368,6 +378,26 @@ try the
party websites or services, and customized browsing experiences.
</p>
+<h3 id="faq-dev-01">How can I set up Chrome for extension development?</h3>
+<p>
+ As long as you are using a version of Chrome that supports
+ extensions, you already have everything you need to start writing an
+ extension of your own.
+ You can start by turning on Developer mode.
+ </p>
+
+ <p>
+ Click the wrench icon
+ <img src="images/toolsmenu.gif" height="29" width="29" alt="" class="nomargin">
+ and select <b>Extensions</b> from the <b>Tools</b> menu.
+ If there's a "+" next to "Developer mode",
+ click the "+" so it turns into a "-".
+ Now you can reload extensions,
+ load an unpacked directory of files as if it were a packaged extension,
+ and more. For a complete tutorial, see
+ <a href="http://code.google.com/chrome/extensions/getstarted.html">Getting Started</a>.
+</p>
+
<h3 id="faq-gen-02">What technologies are used to write extensions for Chrome?</h3>
<p>
Extensions are written using the same standard web
@@ -393,73 +423,61 @@ try the
content from the web.
</p>
+<h3 id="faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</h3>
+<p>
+ To determine which version of Chrome is currently available on each
+ of the different platforms, visit
+ <a href="http://omahaproxy.appspot.com">omahaproxy.appspot.com</a>. On that
+ site you will see data in a format similar to:
+</p>
-<h2>Development</h2>
-
+<pre>cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####</pre>
-<h3 id="faq-dev-01">How can I set up Chrome for extension development?</h3>
<p>
- As long as you are using a version of Chrome that supports
- extensions, you already have everything you need to start writing an
- extension of your own.
- You can start by turning on Developer mode.
- </p>
-
- <p>
- Click the wrench icon
- <img src="images/toolsmenu.gif" height="29" width="29" alt="" class="nomargin">
- and select <b>Extensions</b> from the <b>Tools</b> menu.
- If there's a "+" next to "Developer mode",
- click the "+" so it turns into a "-".
- Now you can reload extensions,
- load an unpacked directory of files as if it were a packaged extension,
- and more. For a complete tutorial, see
- <a href="http://code.google.com/chrome/extensions/getstarted.html">Getting Started</a>.
+ Each line represents information about a different platform and channel
+ combination. The
+ listed platforms are <code>cf</code> (Google Chrome Frame),
+ <code>linux</code>, <code>mac</code>, <code>win</code>, and
+ <code>cros</code> (Google Chrome OS). The listed
+ channels are <code>canary</code>, <code>dev</code>, <code>beta</code>,
+ and <code>stable</code>.
+ The two four-part numbers after the channel represent the current and previous
+ versions of Chrome deployed to that platform-channel
+ combination. The rest of the information is metadata about when the releases
+ were first pushed, as well as revision numbers associated with each build.
</p>
-<h3 id="faq-dev-02">Can I make cross-domain Ajax requests in an extension?</h3>
+
+<h2>Capabilities</h2>
+
+<h3 id="faq-dev-02">Can extensions make cross-domain Ajax requests?</h3>
<p>
Yes. Extensions can make cross-domain requests. See
<a href="http://code.google.com/chrome/extensions/xhr.html">this page</a>
for more information.
</p>
-<h3 id="faq-dev-03">Can I use 3rd party web services in my extension?</h3>
+<h3 id="faq-dev-03">Can extensions use 3rd party web services?</h3>
<p>
Yes. Extensions are capable of making cross-domain Ajax
requests, so they can call remote APIs directly. APIs that provide data
in JSON format are particularly easy to use.
</p>
-<h3 id="faq-dev-04">Can I use OAuth in my extensions?</h3>
-<p>
- Absolutely, there are extensions that use OAuth to access remote data
- APIs. Most developers find it convenient to use a
- <a href="http://unitedheroes.net/OAuthSimple/js/OAuthSimple.js">JavaScript OAuth library</a>
- in order to simplify the process of signing OAuth requests.
-</p>
-
-<h3 id="faq-dev-05">What UI controls can I create for my extension?</h3>
-<p>
- Extensions use HTML and CSS to define their user interfaces, so you can use
- standard form controls to build your UI, or style the interface with CSS,
- as you would a web page. Additionally, your extension may add buttons
- to the Chrome browser itself. See
- <a href="http://code.google.com/chrome/extensions/browserAction.html">browser actions</a>
- and
- <a href="http://code.google.com/chrome/extensions/pageAction.html">page actions</a>
- for more information.
-</p>
-
-<h3 id="faq-dev-06">Can I load DLLs in my extension?</h3>
-<p>
- Yes, using the
- <a href="http://code.google.com/chrome/extensions/trunk/npapi.html">NPAPI interface</a>.
- Because of the possibility for abuse, though, we will review your extension
- before hosting it in the Google Chrome Extensions Gallery
- or Chrome Web Store.
-</p>
-
<h3 id="faq-dev-07">Can extensions encode/decode JSON data?</h3>
<p>
Yes, because V8 (Chrome's JavaScript engine) supports
@@ -469,7 +487,7 @@ try the
any additional JSON libraries in your code.
</p>
-<h3 id="faq-dev-08">Can I store data locally in my extension?</h3>
+<h3 id="faq-dev-08">Can extensions store data locally?</h3>
<p>
Yes, extensions can use <a href="http://dev.w3.org/html5/webstorage/">localStorage</a>
to store string data permanently. Using Chrome's built-in JSON
@@ -480,33 +498,44 @@ try the
which may be used as well.
</p>
-<h3 id="faq-dev-09">How much data can I store in localStorage?</h3>
+<h3 id="faq-dev-04">Can extensions use OAuth?</h3>
<p>
- Extensions can store up to 5MB of data in localStorage.
+ Yes, there are extensions that use OAuth to access remote data
+ APIs. Most developers find it convenient to use a
+ <a href="http://unitedheroes.net/OAuthSimple/js/OAuthSimple.js">JavaScript OAuth library</a>
+ in order to simplify the process of signing OAuth requests.
</p>
-<h3 id="faq-dev-10">Can I create an options menu for my application?</h3>
+<h3 id="faq-dev-06">Can extensions load DLLs?</h3>
<p>
- You can let users set options for your extension by creating an
- <a href="http://code.google.com/chrome/extensions/trunk/options.html">options page</a>,
- which is a simple HTML page that will be loaded when a user clicks the
- "options" button for your extension. This page can read and write settings
- to localStorage, or even send options to a web server so that they can be
- persisted across browsers.
+ Yes, using the <a href="npapi.html">NPAPI interface</a>.
+ Because of the possibility for abuse, though, we will review your extension
+ before hosting it in the Google Chrome Extensions Gallery
+ or Chrome Web Store.
</p>
-<h3 id="faq-dev-11">Can two extensions communicate with each other?</h3>
+<h3 id="faq-dev-05">Can extensions create UI outside of the rendered web page?</h3>
<p>
- Extensions may pass messages to other extensions. See the
- <a href="http://code.google.com/chrome/extensions/trunk/messaging.html#external">message passing documentation</a>
- for more information.
+ Yes, your extension may add buttons to the Chrome browser's user interface.
+ See <a href="browserAction.html">browser actions</a> and
+ <a href="pageAction.html">page actions</a> for more information.
+</p>
+<p>
+ An extension may also create popup notifications, which exist outside of the
+ browser window. See the <a href="notifications.html">desktop
+ notifications</a> documentation for more details.
</p>
-<h3 id="faq-dev-12">What debugging tools are available to extension developers?</h3>
+<h3 id="faq-interact-chrome">Can extensions listen to clicks on Chrome tabs and
+ navigation buttons?</h3>
<p>
- Chrome's built-in developer tools can be used to debug extensions
- as well as web pages. See this
- <a href="http://code.google.com/chrome/extensions/tut_debugging.html ">tutorial on debugging extensions</a>
+ No. Extensions are limited to listening to the events described in the <a href="api_index.html">API documentation</a>.
+</p>
+
+<h3 id="faq-dev-11">Can two extensions communicate with each other?</h3>
+<p>
+ Yes, extensions may pass messages to other extensions. See the
+ <a href="messaging.html#external">message passing documentation</a>
for more information.
</p>
@@ -520,39 +549,7 @@ try the
this.
</p>
-<h3 id="faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</h3>
-<p>
- To determine which version of Chrome is currently available on each
- of the different platforms, visit
- <a href="http://omahaproxy.appspot.com">omahaproxy.appspot.com</a>. On that
- site you will see data in a format similar to:
-</p>
-<pre>cf,dev,#.#.###.#,#.#.###.#
-cf,beta,#.#.###.#,#.#.###.#
-cf,stable,#.#.###.#,#.#.###.#
-linux,dev,#.#.###.#,#.#.###.#
-linux,beta,#.#.###.#,#.#.###.#
-linux,stable,#.#.###.#,#.#.###.#
-mac,dev,#.#.###.#,#.#.###.#
-mac,beta,#.#.###.#,#.#.###.#
-mac,stable,#.#.###.#,#.#.###.#
-win,canary,#.#.###.#,#.#.###.#
-win,dev,#.#.###.#,#.#.###.#
-win,beta,#.#.###.#,#.#.###.#
-win,stable,#.#.###.#,#.#.###.#</pre>
-
-<p>
- Each line represents a different platform and channel combination. The
- listed platforms are <code>cf</code> (Google Chrome Frame),
- <code>linux</code>, <code>mac</code>, and <code>win</code>. The listed
- channels are <code>canary</code>, <code>dev</code>, <code>beta</code>,
- and <code>stable</code>.
- The two four-part numbers at the end of each line represent the range of
- versions of Chrome currently deployed to that platform-channel
- combination.
-</p>
-
-<h3 id="faq-dev-15">Can I add a content script to chrome:// URLs?</h3>
+<h3 id="faq-dev-15">Can extensions modify chrome:// URLs?</h3>
<p>
No. The extensions APIs have been designed to minimize backwards
compatibility issues that can arise when new versions of the browser are
@@ -573,6 +570,64 @@ win,stable,#.#.###.#,#.#.###.#</pre>
to stay the same.
</p>
+<h3 id="faq-open-popups">Can extensions open browser/page action popups without
+ user interaction?</h3>
+<p>
+ No, popups can only be opened if the user clicks on the corresponding page or
+ browser action. An extension cannot open its popup programatically.
+</p>
+
+<h3 id="faq-persist-popups">Can extensions keep popups open after the user
+ clicks away from them?</h3>
+<p>
+ No, popups automatically close when the user focuses on some portion of the
+ browser outside of the popup. There is no way to keep the popup open after
+ the user has clicked away.
+</p>
+
+<h3 id="faq-lifecycle-events">Can extensions be notified when they are
+ installed/uninstalled?</h3>
+<p>
+ No, there are no events an extension can listen to in order to determine
+ whether it has been installed or uninstalled. However, an extension can
+ determine when it has been run for the first time. See <a href="#faq-firstrun">this FAQ entry</a> for information.
+</p>
+
+
+<h2>Development</h2>
+
+
+<h3 id="faq-building-ui">How do I build a UI for my extension?</h3>
+<p>
+ Extensions use HTML and CSS to define their user interfaces, so you can use
+ standard form controls to build your UI, or style the interface with CSS,
+ as you would a web page. Additionally, extensions can add
+ <a href="#faq-dev-05">some limited UI elements to Chrome itself.</a>
+</p>
+
+<h3 id="faq-dev-09">How much data can I store in localStorage?</h3>
+<p>
+ Extensions can store up to 5MB of data in localStorage.
+</p>
+
+<h3 id="faq-dev-10">How do I create an options menu for my application?</h3>
+<p>
+ You can let users set options for your extension by creating an
+ <a href="http://code.google.com/chrome/extensions/trunk/options.html">options page</a>,
+ which is a simple HTML page that will be loaded when a user clicks the
+ "options" button for your extension. This page can read and write settings
+ to localStorage, or even send options to a web server so that they can be
+ persisted across browsers.
+</p>
+
+<h3 id="faq-dev-12">What debugging tools are available to extension developers?</h3>
+<p>
+ Chrome's built-in developer tools can be used to debug extensions
+ as well as web pages. See this
+ <a href="http://code.google.com/chrome/extensions/tut_debugging.html ">tutorial on debugging extensions</a>
+ for more information.
+</p>
+
<h3 id="faq-dev-16">Why do wildcard matches not work for top level domains
(TLDs)?</h3>
<p>
@@ -597,8 +652,35 @@ win,stable,#.#.###.#,#.#.###.#</pre>
your extension on.
</p>
+<h3 id="faq-management">Why does the management API not fire events when my
+ extension is installed/uninstalled?</h3>
+<p>
+ The <a href="management.html">management API</a> was intended to help create
+ new tab page replacement extensions. It was not intended to fire
+ install/uninstall events for the current extension.
+</p>
+
+<h3 id="faq-firstrun">How can an extension determine whether it is running for
+ the first time?</h3>
+<p>
+ An extension can check to see whether it is running for the first time by
+ checking for the presence of a value in localStorage, and writing the value if
+ it does not exist. For example:
+</p>
+
+<pre>var firstRun = (localStorage['firstRun'] == 'true');
+if (!firstRun) {
+ localStorage['firstRun'] = 'true';
+}</pre>
+
+<p>
+ Note that this check should be run in a background page, not a content script.
+</p>
+
+
<h2>Features and bugs</h2>
+
<h3 id="faq-fea-01">I think I've found a bug! How do I make sure it gets
fixed?</h3>
<p>
diff --git a/chrome/common/extensions/docs/static/faq.html b/chrome/common/extensions/docs/static/faq.html
index 482cff2..48fedef 100644
--- a/chrome/common/extensions/docs/static/faq.html
+++ b/chrome/common/extensions/docs/static/faq.html
@@ -16,27 +16,37 @@ try the
<h4>General</h4>
<ul>
<li><a href="#faq-gen-01">What are Google Chrome Extensions?</a></li>
+ <li><a href="#faq-dev-01">How can I set up Chrome for extension development?</a></li>
<li><a href="#faq-gen-02">What technologies are used to write extensions for Chrome?</a></li>
<li><a href="#faq-gen-03">Are extensions fetched from the web every time the browser is loaded?</a></li>
+ <li><a href="#faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</a></li>
</ul>
- <h4>Development</h4>
+ <h4>Capabilities</h4>
<ul>
- <li><a href="#faq-dev-01">How can I set up Chrome for extension development?</a></li>
- <li><a href="#faq-dev-02">Can I make cross-domain Ajax requests in an extension?</a></li>
- <li><a href="#faq-dev-03">Can I use 3rd party web services in my extension?</a></li>
- <li><a href="#faq-dev-04">Can I use OAuth in my extensions?</a></li>
- <li><a href="#faq-dev-05">What UI controls can I create for my extension?</a></li>
- <li><a href="#faq-dev-06">Can I load DLLs in my extension?</a></li>
+ <li><a href="#faq-dev-02">Can extensions make cross-domain Ajax requests?</a></li>
+ <li><a href="#faq-dev-03">Can extensions use 3rd party web services?</a></li>
<li><a href="#faq-dev-07">Can extensions encode/decode JSON data?</a></li>
- <li><a href="#faq-dev-08">Can I store data locally in my extension?</a></li>
- <li><a href="#faq-dev-09">How much data can I store in localStorage?</a></li>
- <li><a href="#faq-dev-10">Can I create an options menu for my application?</a></li>
+ <li><a href="#faq-dev-08">Can extensions store data locally?</a></li>
+ <li><a href="#faq-dev-04">Can extensions use OAuth?</a></li>
+ <li><a href="#faq-dev-06">Can extensions load DLLs?</a></li>
+ <li><a href="#faq-dev-05">Can extensions create UI outside of the rendered web page?</a></li>
+ <li><a href="#faq-interact-chrome">Can extensions listen to clicks on Chrome tabs and navigation buttons?</a>
<li><a href="#faq-dev-11">Can two extensions communicate with each other?</a></li>
- <li><a href="#faq-dev-12">What debugging tools are available to extension developers?</a></li>
<li><a href="#faq-dev-13">Can extensions use Google Analytics?</a></li>
- <li><a href="#faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</a></li>
- <li><a href="#faq-dev-15">Can I add a content script to chrome:// URLs?</a></li>
+ <li><a href="#faq-dev-15">Can extensions modify chrome:// URLs?</a></li>
+ <li><a href="#faq-open-popups">Can extensions open browser/page action popups without user interaction?</a></li>
+ <li><a href="#faq-persist-popups">Can extensions keep popups open after the user clicks away from them?</a></li>
+ <li><a href="#faq-lifecycle-events">Can extensions be notified when they are installed/uninstalled?</a></li>
+ </ul>
+ <h4>Development</h4>
+ <ul>
+ <li><a href="#faq-building-ui">How do I build a UI for my extension?</a>
+ <li><a href="#faq-dev-09">How much data can I store in localStorage?</a></li>
+ <li><a href="#faq-dev-10">How do I create an options menu for my application?</a></li>
+ <li><a href="#faq-dev-12">What debugging tools are available to extension developers?</a></li>
<li><a href="#faq-dev-16">Why do wildcard matches not work for top level domains (TLDs)?</a></li>
+ <li><a href="#faq-management">Why does the management API not fire events when my extension is installed/uninstalled?</a></li>
+ <li><a href="#faq-firstrun">How can an extension determine whether it is running for the first time?</a></li>
</ul>
<h4>Features and bugs</h4>
<ul>
@@ -54,6 +64,27 @@ try the
party websites or services, and customized browsing experiences.
</p>
+<h3 id="faq-dev-01">How can I set up Chrome for extension development?</h3>
+<p>
+ As long as you are using a version of Chrome that supports
+ extensions, you already have everything you need to start writing an
+ extension of your own.
+ You can start by turning on Developer mode.
+ </p>
+
+ <p>
+ Click the wrench icon
+ <img src="images/toolsmenu.gif" height="29" width="29" alt=""
+ class="nomargin" />
+ and select <b>Extensions</b> from the <b>Tools</b> menu.
+ If there's a "+" next to "Developer mode",
+ click the "+" so it turns into a "-".
+ Now you can reload extensions,
+ load an unpacked directory of files as if it were a packaged extension,
+ and more. For a complete tutorial, see
+ <a href="http://code.google.com/chrome/extensions/getstarted.html">Getting Started</a>.
+</p>
+
<h3 id="faq-gen-02">What technologies are used to write extensions for Chrome?</h3>
<p>
Extensions are written using the same standard web
@@ -79,74 +110,61 @@ try the
content from the web.
</p>
+<h3 id="faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</h3>
+<p>
+ To determine which version of Chrome is currently available on each
+ of the different platforms, visit
+ <a href="http://omahaproxy.appspot.com">omahaproxy.appspot.com</a>. On that
+ site you will see data in a format similar to:
+</p>
-<h2>Development</h2>
-
+<pre>cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
+cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####</pre>
-<h3 id="faq-dev-01">How can I set up Chrome for extension development?</h3>
<p>
- As long as you are using a version of Chrome that supports
- extensions, you already have everything you need to start writing an
- extension of your own.
- You can start by turning on Developer mode.
- </p>
-
- <p>
- Click the wrench icon
- <img src="images/toolsmenu.gif" height="29" width="29" alt=""
- class="nomargin" />
- and select <b>Extensions</b> from the <b>Tools</b> menu.
- If there's a "+" next to "Developer mode",
- click the "+" so it turns into a "-".
- Now you can reload extensions,
- load an unpacked directory of files as if it were a packaged extension,
- and more. For a complete tutorial, see
- <a href="http://code.google.com/chrome/extensions/getstarted.html">Getting Started</a>.
+ Each line represents information about a different platform and channel
+ combination. The
+ listed platforms are <code>cf</code> (Google Chrome Frame),
+ <code>linux</code>, <code>mac</code>, <code>win</code>, and
+ <code>cros</code> (Google Chrome OS). The listed
+ channels are <code>canary</code>, <code>dev</code>, <code>beta</code>,
+ and <code>stable</code>.
+ The two four-part numbers after the channel represent the current and previous
+ versions of Chrome deployed to that platform-channel
+ combination. The rest of the information is metadata about when the releases
+ were first pushed, as well as revision numbers associated with each build.
</p>
-<h3 id="faq-dev-02">Can I make cross-domain Ajax requests in an extension?</h3>
+
+<h2>Capabilities</h2>
+
+<h3 id="faq-dev-02">Can extensions make cross-domain Ajax requests?</h3>
<p>
Yes. Extensions can make cross-domain requests. See
<a href="http://code.google.com/chrome/extensions/xhr.html">this page</a>
for more information.
</p>
-<h3 id="faq-dev-03">Can I use 3rd party web services in my extension?</h3>
+<h3 id="faq-dev-03">Can extensions use 3rd party web services?</h3>
<p>
Yes. Extensions are capable of making cross-domain Ajax
requests, so they can call remote APIs directly. APIs that provide data
in JSON format are particularly easy to use.
</p>
-<h3 id="faq-dev-04">Can I use OAuth in my extensions?</h3>
-<p>
- Absolutely, there are extensions that use OAuth to access remote data
- APIs. Most developers find it convenient to use a
- <a href="http://unitedheroes.net/OAuthSimple/js/OAuthSimple.js">JavaScript OAuth library</a>
- in order to simplify the process of signing OAuth requests.
-</p>
-
-<h3 id="faq-dev-05">What UI controls can I create for my extension?</h3>
-<p>
- Extensions use HTML and CSS to define their user interfaces, so you can use
- standard form controls to build your UI, or style the interface with CSS,
- as you would a web page. Additionally, your extension may add buttons
- to the Chrome browser itself. See
- <a href="http://code.google.com/chrome/extensions/browserAction.html">browser actions</a>
- and
- <a href="http://code.google.com/chrome/extensions/pageAction.html">page actions</a>
- for more information.
-</p>
-
-<h3 id="faq-dev-06">Can I load DLLs in my extension?</h3>
-<p>
- Yes, using the
- <a href="http://code.google.com/chrome/extensions/trunk/npapi.html">NPAPI interface</a>.
- Because of the possibility for abuse, though, we will review your extension
- before hosting it in the Google Chrome Extensions Gallery
- or Chrome Web Store.
-</p>
-
<h3 id="faq-dev-07">Can extensions encode/decode JSON data?</h3>
<p>
Yes, because V8 (Chrome's JavaScript engine) supports
@@ -156,7 +174,7 @@ try the
any additional JSON libraries in your code.
</p>
-<h3 id="faq-dev-08">Can I store data locally in my extension?</h3>
+<h3 id="faq-dev-08">Can extensions store data locally?</h3>
<p>
Yes, extensions can use <a href="http://dev.w3.org/html5/webstorage/">localStorage</a>
to store string data permanently. Using Chrome's built-in JSON
@@ -167,33 +185,45 @@ try the
which may be used as well.
</p>
-<h3 id="faq-dev-09">How much data can I store in localStorage?</h3>
+<h3 id="faq-dev-04">Can extensions use OAuth?</h3>
<p>
- Extensions can store up to 5MB of data in localStorage.
+ Yes, there are extensions that use OAuth to access remote data
+ APIs. Most developers find it convenient to use a
+ <a href="http://unitedheroes.net/OAuthSimple/js/OAuthSimple.js">JavaScript OAuth library</a>
+ in order to simplify the process of signing OAuth requests.
</p>
-<h3 id="faq-dev-10">Can I create an options menu for my application?</h3>
+<h3 id="faq-dev-06">Can extensions load DLLs?</h3>
<p>
- You can let users set options for your extension by creating an
- <a href="http://code.google.com/chrome/extensions/trunk/options.html">options page</a>,
- which is a simple HTML page that will be loaded when a user clicks the
- "options" button for your extension. This page can read and write settings
- to localStorage, or even send options to a web server so that they can be
- persisted across browsers.
+ Yes, using the <a href="npapi.html">NPAPI interface</a>.
+ Because of the possibility for abuse, though, we will review your extension
+ before hosting it in the Google Chrome Extensions Gallery
+ or Chrome Web Store.
</p>
-<h3 id="faq-dev-11">Can two extensions communicate with each other?</h3>
+<h3 id="faq-dev-05">Can extensions create UI outside of the rendered web page?</h3>
<p>
- Extensions may pass messages to other extensions. See the
- <a href="http://code.google.com/chrome/extensions/trunk/messaging.html#external">message passing documentation</a>
- for more information.
+ Yes, your extension may add buttons to the Chrome browser's user interface.
+ See <a href="browserAction.html">browser actions</a> and
+ <a href="pageAction.html">page actions</a> for more information.
+</p>
+<p>
+ An extension may also create popup notifications, which exist outside of the
+ browser window. See the <a href="notifications.html">desktop
+ notifications</a> documentation for more details.
</p>
-<h3 id="faq-dev-12">What debugging tools are available to extension developers?</h3>
+<h3 id="faq-interact-chrome">Can extensions listen to clicks on Chrome tabs and
+ navigation buttons?</h3>
<p>
- Chrome's built-in developer tools can be used to debug extensions
- as well as web pages. See this
- <a href="http://code.google.com/chrome/extensions/tut_debugging.html ">tutorial on debugging extensions</a>
+ No. Extensions are limited to listening to the events described in the <a
+ href="api_index.html">API documentation</a>.
+</p>
+
+<h3 id="faq-dev-11">Can two extensions communicate with each other?</h3>
+<p>
+ Yes, extensions may pass messages to other extensions. See the
+ <a href="messaging.html#external">message passing documentation</a>
for more information.
</p>
@@ -207,39 +237,7 @@ try the
this.
</p>
-<h3 id="faq-dev-14">How do I determine which version of Chrome is deployed to which channel?</h3>
-<p>
- To determine which version of Chrome is currently available on each
- of the different platforms, visit
- <a href="http://omahaproxy.appspot.com">omahaproxy.appspot.com</a>. On that
- site you will see data in a format similar to:
-</p>
-<pre>cf,dev,#.#.###.#,#.#.###.#
-cf,beta,#.#.###.#,#.#.###.#
-cf,stable,#.#.###.#,#.#.###.#
-linux,dev,#.#.###.#,#.#.###.#
-linux,beta,#.#.###.#,#.#.###.#
-linux,stable,#.#.###.#,#.#.###.#
-mac,dev,#.#.###.#,#.#.###.#
-mac,beta,#.#.###.#,#.#.###.#
-mac,stable,#.#.###.#,#.#.###.#
-win,canary,#.#.###.#,#.#.###.#
-win,dev,#.#.###.#,#.#.###.#
-win,beta,#.#.###.#,#.#.###.#
-win,stable,#.#.###.#,#.#.###.#</pre>
-
-<p>
- Each line represents a different platform and channel combination. The
- listed platforms are <code>cf</code> (Google Chrome Frame),
- <code>linux</code>, <code>mac</code>, and <code>win</code>. The listed
- channels are <code>canary</code>, <code>dev</code>, <code>beta</code>,
- and <code>stable</code>.
- The two four-part numbers at the end of each line represent the range of
- versions of Chrome currently deployed to that platform-channel
- combination.
-</p>
-
-<h3 id="faq-dev-15">Can I add a content script to chrome:// URLs?</h3>
+<h3 id="faq-dev-15">Can extensions modify chrome:// URLs?</h3>
<p>
No. The extensions APIs have been designed to minimize backwards
compatibility issues that can arise when new versions of the browser are
@@ -260,6 +258,65 @@ win,stable,#.#.###.#,#.#.###.#</pre>
to stay the same.
</p>
+<h3 id="faq-open-popups">Can extensions open browser/page action popups without
+ user interaction?</h3>
+<p>
+ No, popups can only be opened if the user clicks on the corresponding page or
+ browser action. An extension cannot open its popup programatically.
+</p>
+
+<h3 id="faq-persist-popups">Can extensions keep popups open after the user
+ clicks away from them?</h3>
+<p>
+ No, popups automatically close when the user focuses on some portion of the
+ browser outside of the popup. There is no way to keep the popup open after
+ the user has clicked away.
+</p>
+
+<h3 id="faq-lifecycle-events">Can extensions be notified when they are
+ installed/uninstalled?</h3>
+<p>
+ No, there are no events an extension can listen to in order to determine
+ whether it has been installed or uninstalled. However, an extension can
+ determine when it has been run for the first time. See <a
+ href="#faq-firstrun">this FAQ entry</a> for information.
+</p>
+
+
+<h2>Development</h2>
+
+
+<h3 id="faq-building-ui">How do I build a UI for my extension?</h3>
+<p>
+ Extensions use HTML and CSS to define their user interfaces, so you can use
+ standard form controls to build your UI, or style the interface with CSS,
+ as you would a web page. Additionally, extensions can add
+ <a href="#faq-dev-05">some limited UI elements to Chrome itself.</a>
+</p>
+
+<h3 id="faq-dev-09">How much data can I store in localStorage?</h3>
+<p>
+ Extensions can store up to 5MB of data in localStorage.
+</p>
+
+<h3 id="faq-dev-10">How do I create an options menu for my application?</h3>
+<p>
+ You can let users set options for your extension by creating an
+ <a href="http://code.google.com/chrome/extensions/trunk/options.html">options page</a>,
+ which is a simple HTML page that will be loaded when a user clicks the
+ "options" button for your extension. This page can read and write settings
+ to localStorage, or even send options to a web server so that they can be
+ persisted across browsers.
+</p>
+
+<h3 id="faq-dev-12">What debugging tools are available to extension developers?</h3>
+<p>
+ Chrome's built-in developer tools can be used to debug extensions
+ as well as web pages. See this
+ <a href="http://code.google.com/chrome/extensions/tut_debugging.html ">tutorial on debugging extensions</a>
+ for more information.
+</p>
+
<h3 id="faq-dev-16">Why do wildcard matches not work for top level domains
(TLDs)?</h3>
<p>
@@ -284,8 +341,35 @@ win,stable,#.#.###.#,#.#.###.#</pre>
your extension on.
</p>
+<h3 id="faq-management">Why does the management API not fire events when my
+ extension is installed/uninstalled?</h3>
+<p>
+ The <a href="management.html">management API</a> was intended to help create
+ new tab page replacement extensions. It was not intended to fire
+ install/uninstall events for the current extension.
+</p>
+
+<h3 id="faq-firstrun">How can an extension determine whether it is running for
+ the first time?</h3>
+<p>
+ An extension can check to see whether it is running for the first time by
+ checking for the presence of a value in localStorage, and writing the value if
+ it does not exist. For example:
+</p>
+
+<pre>var firstRun = (localStorage['firstRun'] == 'true');
+if (!firstRun) {
+ localStorage['firstRun'] = 'true';
+}</pre>
+
+<p>
+ Note that this check should be run in a background page, not a content script.
+</p>
+
+
<h2>Features and bugs</h2>
+
<h3 id="faq-fea-01">I think I've found a bug! How do I make sure it gets
fixed?</h3>
<p>