<!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc. Note:
    1) The <head> information in this page is significant, should be uniform
       across api docs and should be edited only with knowledge of the
       templating mechanism.
    3) All <body>.innerHTML is genereated as an rendering step. If viewed in a
       browser, it will be re-generated from the template, json schema and
       authored overview content.
    4) The <body>.innerHTML is also generated by an offline step so that this
       page may easily be indexed by search engines.
--><html xmlns="http://www.w3.org/1999/xhtml"><head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css">
    <link href="css/print.css" rel="stylesheet" type="text/css" media="print">
    <script type="text/javascript" src="../../../third_party/jstemplate/jstemplate_compiled.js">
    </script>
    <script type="text/javascript" src="js/api_page_generator.js"></script>
    <script type="text/javascript" src="js/bootstrap.js"></script>
    <script type="text/javascript" src="js/sidebar.js"></script>
  <title>Browser Actions - Google Chrome Extensions - Google Code</title></head>
  <body>  <div id="gc-container" class="labs">
      <div id="devModeWarning">
        You are viewing extension docs in chrome via the 'file:' scheme: are you expecting to see local changes when you refresh? You'll need run chrome with --allow-file-access-from-files.
      </div>
      <!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION -->
      <!-- In particular, sub-templates that recurse, must be used by allowing
           jstemplate to make a copy of the template in this section which
           are not operated on by way of the jsskip="true" -->
      <div style="display:none">

        <!-- VALUE -->
        <div id="valueTemplate">
          <dt>
            <var>paramName</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum">enumerated</span>
                    <span id="typeTemplate">
                      <span>
                        <a> Type</a>
                      </span>
                      <span>
                        <span>
                          array of <span><span></span></span>
                        </span>
                        <span>paramType</span>
                        <span></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd>
            Description of this parameter from the json schema.
          </dd>
          <dd>
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd>
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd>
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd>
            <div></div>
          </dd>

        </div> <!-- /VALUE -->

        <div id="functionParametersTemplate">
          <h5>Parameters</h5>
          <dl>
            <div>
              <div>
              </div>
            </div>
          </dl>
        </div>
      </div> <!-- /SUBTEMPLATES -->

  <a id="top"></a>
    <div id="skipto">
      <a href="#gc-pagecontent">Skip to page content</a>
      <a href="#gc-toc">Skip to main navigation</a>
    </div>
    <!-- API HEADER -->
    <table id="header" width="100%" cellspacing="0" border="0">
      <tbody><tr>
        <td valign="middle"><a href="http://code.google.com/"><img src="images/code_labs_logo.gif" height="43" width="161" alt="Google Code Labs" style="border:0; margin:0;"></a></td>
        <td valign="middle" width="100%" style="padding-left:0.6em;">
          <form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em">
            <div id="gsc-search-box">
              <input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno">
              <input type="hidden" name="ie" value="UTF-8">
              <input type="text" name="q" value="" size="55">
              <input class="gsc-search-button" type="submit" name="sa" value="Search">
              <br>
              <span class="greytext">e.g. "page action" or "tabs"</span>
            </div>
          </form>

          <script type="text/javascript" src="http://www.google.com/jsapi"></script>
          <script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script>
          <script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse&amp;t13n_langs=en"></script>
          <script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&amp;lang=en"></script>
        </td>
      </tr>
    </tbody></table>

    <div id="codesiteContent" class="">

      <a id="gc-topnav-anchor"></a>
      <div id="gc-topnav">
        <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1>
        <ul id="home" class="gc-topnav-tabs">
          <li id="home_link">
            <a href="index.html" title="Google Chrome Extensions home page">Home</a>
          </li>
          <li id="docs_link">
            <a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a>
          </li>
          <li id="faq_link">
            <a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a>
          </li>
          <li id="samples_link">
            <a href="samples.html" title="Sample extensions (with source code)">Samples</a>
          </li>
          <li id="group_link">
            <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a>
          </li>
        </ul>
      </div> <!-- end gc-topnav -->

    <div class="g-section g-tpl-170">
      <!-- SIDENAV -->
      <div class="g-unit g-first" id="gc-toc">
        <ul>
          <li><a href="getstarted.html">Getting Started</a></li>
          <li><a href="overview.html">Overview</a></li>
          <li><a href="whats_new.html">What's New?</a></li>
          <li><h2><a href="devguide.html">Developer's Guide</a></h2>
            <ul>
              <li>Browser UI
                <ul>
                  <li class="leftNavSelected">Browser Actions</li>
                  <li><a href="contextMenus.html">Context Menus</a></li>
                  <li><a href="notifications.html">Desktop Notifications</a></li>
                  <li><a href="omnibox.html">Omnibox</a></li>
                  <li><a href="options.html">Options Pages</a></li>
                  <li><a href="override.html">Override Pages</a></li>
                  <li><a href="pageAction.html">Page Actions</a></li>
                </ul>
              </li>
              <li>Browser Interaction
                <ul>
                  <li><a href="bookmarks.html">Bookmarks</a></li>
                  <li><a href="cookies.html">Cookies</a></li>
                  <li><a href="events.html">Events</a></li>
                  <li><a href="history.html">History</a></li>
                  <li><a href="management.html">Management</a></li>
                  <li><a href="tabs.html">Tabs</a></li>
                  <li><a href="windows.html">Windows</a></li>
                </ul>
              </li>
              <li>Implementation
                <ul>
                  <li><a href="a11y.html">Accessibility</a></li>
                  <li><a href="background_pages.html">Background Pages</a></li>
                  <li><a href="content_scripts.html">Content Scripts</a></li>
                  <li><a href="xhr.html">Cross-Origin XHR</a></li>
                  <li><a href="idle.html">Idle</a></li>
                  <li><a href="i18n.html">Internationalization</a></li>
                  <li><a href="messaging.html">Message Passing</a></li>
                  <li><a href="npapi.html">NPAPI Plugins</a></li>
                </ul>
              </li>
              <li>Finishing
                <ul>
                  <li><a href="hosting.html">Hosting</a></li>
                  <li><a href="external_extensions.html">Other Deployment Options</a></li>
                </ul>
              </li>
            </ul>
          </li>
          <li><h2><a href="apps.html">Packaged Apps</a></h2></li>
          <li><h2><a href="tutorials.html">Tutorials</a></h2>
            <ul>
              <li><a href="tut_debugging.html">Debugging</a></li>
              <li><a href="tut_analytics.html">Google Analytics</a></li>
              <li><a href="tut_oauth.html">OAuth</a></li>
            </ul>
          </li>
          <li><h2>Reference</h2>
            <ul>
              <li>Formats
                <ul>
                  <li><a href="manifest.html">Manifest Files</a></li>
                  <li><a href="match_patterns.html">Match Patterns</a></li>
                </ul>
              </li>
              <li><a href="permission_warnings.html">Permission Warnings</a></li>
              <li><a href="api_index.html">chrome.* APIs</a></li>
              <li><a href="api_other.html">Other APIs</a></li>
            </ul>
          </li>
          <li><h2><a href="samples.html">Samples</a></h2></li>
          <div class="line"> </div>
          <li><h2>More</h2>
            <ul>
              <li><a href="http://code.google.com/chrome/webstore/docs/index.html">Chrome Web Store</a></li>
              <li><a href="http://code.google.com/chrome/apps/docs/developers_guide.html">Hosted Apps</a></li>
              <li><a href="themes.html">Themes</a></li>
            </ul>
          </li>
        </ul>
      </div>
      <script>
        initToggles();
      </script>

    <div class="g-unit" id="gc-pagecontent">
      <div id="pageTitle">
        <h1 class="page_title">Browser Actions</h1>
      </div>
        <!-- TABLE OF CONTENTS -->
        <div id="toc">
          <h2>Contents</h2>
          <ol>
            <li>
              <a href="#manifest">Manifest</a>
              <ol>
                <li style="display: none; ">
                  <a>h3Name</a>
                </li>
              </ol>
            </li><li>
              <a href="#ui">Parts of the UI</a>
              <ol>
                <li>
                  <a href="#icon">Icon</a>
                </li><li>
                  <a href="#tooltip">Tooltip</a>
                </li><li>
                  <a href="#badge">Badge</a>
                </li><li>
                  <a href="#popups">Popup</a>
                </li>
              </ol>
            </li><li>
              <a href="#H2-6">Tips</a>
              <ol>
                <li style="display: none; ">
                  <a>h3Name</a>
                </li>
              </ol>
            </li><li>
              <a href="#examples"> Examples </a>
              <ol>
                <li style="display: none; ">
                  <a>h3Name</a>
                </li>
              </ol>
            </li>
              <li>
                <a href="#apiReference">API reference: chrome.browserAction</a>
                <ol>
                  <li style="display: none; ">
                    <a href="#properties">Properties</a>
                    <ol>
                      <li>
                        <a href="#property-anchor">propertyName</a>
                      </li>
                    </ol>
                  </li>
                  <li>
                    <a href="#global-methods">Methods</a>
                    <ol>
                      <li>
                        <a href="#method-setBadgeBackgroundColor">setBadgeBackgroundColor</a>
                      </li><li>
                        <a href="#method-setBadgeText">setBadgeText</a>
                      </li><li>
                        <a href="#method-setIcon">setIcon</a>
                      </li><li>
                        <a href="#method-setPopup">setPopup</a>
                      </li><li>
                        <a href="#method-setTitle">setTitle</a>
                      </li>
                    </ol>
                  </li>
                  <li>
                    <a href="#global-events">Events</a>
                    <ol>
                      <li>
                        <a href="#event-onClicked">onClicked</a>
                      </li>
                    </ol>
                  </li>
                  <li style="display: none; ">
                    <a href="#types">Types</a>
                    <ol>
                      <li>
                        <a href="#id-anchor">id</a>
                      </li>
                    </ol>
                  </li>
                </ol>
              </li>
          </ol>
        </div>
        <!-- /TABLE OF CONTENTS -->

        <!-- Standard content lead-in for experimental API pages -->
        <p id="classSummary" style="display: none; ">
          For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page.
        </p>

        <!-- STATIC CONTENT PLACEHOLDER -->
        <div id="static"><div id="pageData-name" class="pageData">Browser Actions</div>

<!-- BEGIN AUTHORED CONTENT -->
<p>Use browser actions to put icons
  in the main Google Chrome toolbar,
  to the right of the address bar.
  In addition to its <a href="#icon">icon</a>,
  a browser action can also have
  a <a href="#tooltip">tooltip</a>,
  a <a href="#badge">badge</a>,
  and a <a href="#popups">popup</a>.
  </p>

<p>
In the following figure,
the multicolored square
to the right of the address bar
is the icon for a browser action.
A popup is below the icon.
</p>

<img src="images/browser-action.png" width="363" height="226">

<p>
If you want to create an icon that isn't always visible,
use a <a href="pageAction.html">page action</a>
instead of a browser action.
</p>

<p class="caution">
<strong>Note:</strong>
Packaged apps cannot use browser actions.
</p>

<!-- [PENDING: We should show tooltips and badges, as well.] -->

<h2 id="manifest">Manifest</h2>

<p>
Register your browser action in the
<a href="manifest.html">extension manifest</a>
like this:
</p>

<pre>{
  "name": "My extension",
  ...
  <b>"browser_action": {
    "default_icon": "images/icon19.png", <em>// optional</em>
    "default_title": "Google Mail",      <em>// optional; shown in tooltip</em>
    "default_popup": "popup.html"        <em>// optional</em>
  }</b>,
  ...
}</pre>

<h2 id="ui">Parts of the UI</h2>

<p>
A browser action can have an <a href="#icon">icon</a>,
a <a href="#tooltip">tooltip</a>,
a <a href="#badge">badge</a>,
and a <a href="#popups">popup</a>.
</p>

<h3 id="icon">Icon</h3>

<p>Browser action icons can be up to 19 pixels wide and high.
  Larger icons are resized to fit, but for best results,
  use a 19-pixel square icon.</p>

<p>You can set the icon in two ways:
  using a static image or using the
  HTML5 <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html">canvas element</a>.
  Using static images is easier for simple applications,
  but you can create more dynamic UIs —
  such as smooth animation —
  using the canvas element.
  </p>

<p>Static images can be in any format WebKit can display,
  including BMP, GIF, ICO, JPEG, or PNG.
  </p>

<p>To set the icon,
use the <b>default_icon</b> field of <b>browser_action</b>
in the <a href="#manifest">manifest</a>,
or call the <a href="#method-setIcon">setIcon()</a> method.


</p><h3 id="tooltip">Tooltip</h3>

<p>
To set the tooltip,
use the <b>default_title</b> field of <b>browser_action</b>
in the <a href="#manifest">manifest</a>,
or call the <a href="#method-setTitle">setTitle()</a> method.
You can specify locale-specific strings for the <b>default_title</b> field;
see <a href="i18n.html">Internationalization</a> for details.
</p>

<h3 id="badge">Badge</h3>

<p>Browser actions can optionally display a <em>badge</em> —
  a bit of text that is layered over the icon.
  Badges make it easy to update the browser action
  to display a small amount of information
  about the state of the extension.</p>

<p>Because the badge has limited space,
   it should have 4 characters or less.
  </p>

<p>
Set the text and color of the badge using
<a href="#method-setBadgeText">setBadgeText()</a> and
<a href="#method-setBadgeBackgroundColor">setBadgeBackgroundColor()</a>,
respectively.
<!-- [PENDING: if you have a color but no text, will anything display?] -->
</p>


<h3 id="popups">Popup</h3>

<p>If a browser action has a popup,
  the popup appears when the user clicks the icon.
  The popup can contain any HTML contents that you like,
  and it's automatically sized to fit its contents.
  </p>

<p>
To add a popup to your browser action,
create an HTML file with the popup's contents.
Specify the HTML file in the <b>default_popup</b> field of <b>browser_action</b>
in the <a href="#manifest">manifest</a>, or call the
<a href="#method-setPopup">setPopup()</a> method.
</p>

<a name="H2-6"></a><h2>Tips</h2>

<p>For the best visual impact,
  follow these guidelines:</p>

<ul>
  <li><b>Do</b> use browser actions for features
    that make sense on most pages.
  </li><li><b>Don't</b> use browser actions for features
    that make sense for only a few pages.
    Use <a href="pageAction.html">page actions</a> instead.
  </li><li><b>Do</b> use big, colorful icons that make the most of
    the 19x19-pixel space.
    Browser action icons should seem a little bigger
    and heavier than page action icons.
  </li><li><b>Don't</b> attempt to mimic
    Google Chrome's monochrome "wrench" icon.
    That doesn't work well with themes, and anyway,
    extensions should stand out a little.
  </li><li><b>Do</b> use alpha transparency
    to add soft edges to your icon.
    Because many people use themes,
    your icon should look nice
    on a variety of background colors.
  </li><li><b>Don't</b> constantly animate your icon.
    That's just annoying.
</li></ul>

<h2 id="examples"> Examples </h2>

<p>
You can find simple examples of using browser actions in the
<a href="http://src.chromium.org/viewvc/chrome/trunk/src/chrome/common/extensions/docs/examples/api/browserAction/">examples/api/browserAction</a>
directory.
For other examples and for help in viewing the source code, see
<a href="samples.html">Samples</a>.
</p>

<!-- END AUTHORED CONTENT -->
</div>

        <!-- API PAGE -->
        <div class="apiPage">
        <a name="apiReference"></a>
        <h2>API reference: chrome.browserAction</h2>

          <!-- PROPERTIES -->
          <div class="apiGroup" style="display: none; ">
            <a name="properties"></a>
            <h3 id="properties">Properties</h3>

            <div>
              <a></a>
              <h4>getLastError</h4>
              <div class="summary">
                <!-- Note: intentionally longer 80 columns -->
                <span>chrome.extension</span><span>lastError</span>
              </div>
              <div>
              </div>
            </div>

          </div> <!-- /apiGroup -->

          <!-- METHODS -->
          <div id="methodsTemplate" class="apiGroup">
            <a name="global-methods"></a>
            <h3>Methods</h3>

            <!-- iterates over all functions -->
            <div class="apiItem">
              <a name="method-setBadgeBackgroundColor"></a> <!-- method-anchor -->
              <h4>setBadgeBackgroundColor</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.browserAction.setBadgeBackgroundColor</span>(<span class="null"><span style="display: none; ">, </span><span>object</span>
                      <var><span>details</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Sets the background color for the badge.</p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
          <dt>
            <var>details</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>object</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd style="display: none; ">
            Description of this parameter from the json schema.
          </dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
          <dt>
            <var>color</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span>
                          array of <span><span>
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>integer</span>
                        <span style="display: none; "></span>
                      </span>
                    </span></span>
                        </span>
                        <span style="display: none; ">paramType</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>An array of four integers in the range [0,255] that make up the RGBA color of the badge. For example, opaque red is <code>[255, 0, 0, 255]</code>.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>tabId</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>integer</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Limits the change to when a particular tab is selected. Automatically resets when the tab is closed.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div style="display: none; ">
                  <div>
                  <h4>Callback function</h4>
                  <p>
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p style="display: none; ">
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div><div class="apiItem">
              <a name="method-setBadgeText"></a> <!-- method-anchor -->
              <h4>setBadgeText</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.browserAction.setBadgeText</span>(<span class="null"><span style="display: none; ">, </span><span>object</span>
                      <var><span>details</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Sets the badge text for the browser action. The badge is displayed on top of the icon.</p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
          <dt>
            <var>details</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>object</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd style="display: none; ">
            Description of this parameter from the json schema.
          </dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
          <dt>
            <var>text</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Any number of characters can be passed, but only about four can fit in the space.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>tabId</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>integer</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Limits the change to when a particular tab is selected. Automatically resets when the tab is closed.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div style="display: none; ">
                  <div>
                  <h4>Callback function</h4>
                  <p>
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p style="display: none; ">
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div><div class="apiItem">
              <a name="method-setIcon"></a> <!-- method-anchor -->
              <h4>setIcon</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.browserAction.setIcon</span>(<span class="null"><span style="display: none; ">, </span><span>object</span>
                      <var><span>details</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Sets the icon for the browser action. The icon can be specified either as the path to an image file or as the pixel data from a canvas element. Either the <b>path</b> or the <b>imageData</b> property must be specified.</p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
          <dt>
            <var>details</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>object</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd style="display: none; ">
            Description of this parameter from the json schema.
          </dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
          <dt>
            <var>imageData</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>ImageData</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Pixel data for an image. Must be an ImageData object (for example, from a <code>canvas</code> element).</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div style="display: none; ">
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>path</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Relative path to an image in the extension to show in the browser action.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>tabId</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>integer</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Limits the change to when a particular tab is selected. Automatically resets when the tab is closed.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div style="display: none; ">
                  <div>
                  <h4>Callback function</h4>
                  <p>
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p style="display: none; ">
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div><div class="apiItem">
              <a name="method-setPopup"></a> <!-- method-anchor -->
              <h4>setPopup</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.browserAction.setPopup</span>(<span class="null"><span style="display: none; ">, </span><span>object</span>
                      <var><span>details</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Sets the html document to be opened as a popup when the user clicks on the browser action's icon.</p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
          <dt>
            <var>details</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>object</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd style="display: none; ">
            Description of this parameter from the json schema.
          </dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
          <dt>
            <var>tabId</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>integer</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Limits the change to when a particular tab is selected. Automatically resets when the tab is closed.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>popup</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The html file to show in a popup.  If set to the empty string (''), no popup is shown.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div style="display: none; ">
                  <div>
                  <h4>Callback function</h4>
                  <p>
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p>
                  This function was added in version <b><span>5.0.316.0</span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div><div class="apiItem">
              <a name="method-setTitle"></a> <!-- method-anchor -->
              <h4>setTitle</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.browserAction.setTitle</span>(<span class="null"><span style="display: none; ">, </span><span>object</span>
                      <var><span>details</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Sets the title of the browser action. This shows up in the tooltip.</p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
          <dt>
            <var>details</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>object</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd style="display: none; ">
            Description of this parameter from the json schema.
          </dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
          <dt>
            <var>title</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The string the browser action should display when moused over.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>tabId</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>integer</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Limits the change to when a particular tab is selected. Automatically resets when the tab is closed.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div style="display: none; ">
                  <div>
                  <h4>Callback function</h4>
                  <p>
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p style="display: none; ">
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div>  <!-- /apiItem -->

          </div>  <!-- /apiGroup -->

          <!-- EVENTS -->
          <div id="eventsTemplate" class="apiGroup">
            <a name="global-events"></a>
            <h3>Events</h3>
            <!-- iterates over all events -->
            <div class="apiItem">
              <a name="event-onClicked"></a>
              <h4>onClicked</h4>

              <div class="summary">
                <!-- Note: intentionally longer 80 columns -->
                <span class="subdued">chrome.browserAction.</span><span>onClicked</span><span class="subdued">.addListener</span>(function(<span>Tab tab</span>) <span class="subdued">{...}</span>);
              </div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Fired when a browser action icon is clicked.  This event will not fire if the browser action has a popup.</p>

                <!-- PARAMETERS -->
                <div>
                  <h4>Parameters</h4>
                  <dl>
                    <div>
                      <div>
          <dt>
            <var>tab</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span>
                        <a href="tabs.html#type-Tab">Tab</a>
                      </span>
                      <span style="display: none; ">
                        <span>
                          array of <span><span></span></span>
                        </span>
                        <span>paramType</span>
                        <span></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd style="display: none; ">
            Description of this parameter from the json schema.
          </dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                    </div>
                  </dl>
                </div>
              </div> <!-- /decription -->

            </div> <!-- /apiItem -->

          </div> <!-- /apiGroup -->

          <!-- TYPES -->
          <div class="apiGroup" style="display: none; ">
            <a name="types"></a>
            <h3 id="types">Types</h3>

            <!-- iterates over all types -->
            <div class="apiItem">
              <a></a>
              <h4>type name</h4>

              <div>
              </div>

            </div> <!-- /apiItem -->

          </div> <!-- /apiGroup -->

        </div> <!-- /apiPage -->
      </div> <!-- /gc-pagecontent -->
    </div> <!-- /g-section -->
  </div> <!-- /codesiteContent -->
    <div id="gc-footer" --="">
      <div class="text">
  <p>
  Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
  the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
  Attribution 3.0 License</a>, and code samples are licensed under the
  <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
  </p>
  <p>
  ©2011 Google
  </p>

<!-- begin analytics -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>

<script type="text/javascript">
  // chrome doc tracking
  try {
    var engdocs = _gat._getTracker("YT-10763712-2");
    engdocs._trackPageview();
  } catch(err) {}

  // code.google.com site-wide tracking
  try {
    _uacct="UA-18071-1";
    _uanchor=1;
    _uff=0;
    urchinTracker();
  }
  catch(e) {/* urchinTracker not available. */}
</script>
<!-- end analytics -->
      </div>
    </div> <!-- /gc-footer -->
  </div> <!-- /gc-container -->
</body></html>
