<!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>chrome.experimental.infobars - 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>

          <!-- 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><a href="browserAction.html">Browser Actions</a></li>
                  <li><a href="contextMenus.html">Context Menus</a></li>
                  <li><a href="notifications.html">Desktop Notifications</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>
                  <li><a href="themes.html">Themes</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="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>
                  <!-- <li>Packages (.crx)</li> -->
                </ul>
              </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">Installable Web 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">chrome.experimental.infobars</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="#apiReference">API reference: chrome.experimental.infobars</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="#methods">Methods</a>
                    <ol>
                      <li>
                        <a href="#method-show">show</a>
                      </li>
                    </ol>
                  </li>
                  <li style="display: none; ">
                    <a href="#events">Events</a>
                    <ol>
                      <li>
                        <a href="#event-anchor">eventName</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">
          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"><!-- BEGIN AUTHORED CONTENT -->
<p>
The infobars API allows you to add a
horizontal panel just above a tab's contents,
as the following screenshot shows.
</p>

<p>
<img src="images/infobar.png" width="566" height="150" alt="An infobar asking whether the user wants to translate the current page">
</p>

<p>
Use an infobar to tell the reader
something about a particular page.
When the user leaves the page for which the infobar is displayed,
Google Chrome automatically closes the infobar.
</p>

<p>
You implement the content of your
infobar using HTML. Because infobars are ordinary pages inside an extension,
they can
<a href="overview.html#pageComm">communicate with other extension pages</a>.
</p>


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

<p>
The infobars API is currently
experimental, so you must declare the "experimental"
permission to use it. Also, you should specify
a 16x16-pixel icon for display next to your infobar.
For example:
</p>

<pre>{
  "name": "Andy's infobar extension",
  "version": "1.0",
  <b>"permissions": ["experimental"],</b>
  <b>"icons": {</b>
    <b>"16": "16.png"</b>
  <b>},</b>
  "background_page": "background.html"
}</pre>

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

        <!-- API PAGE -->
        <div class="apiPage">
        <a name="apiReference"></a>
        <h2>API reference: chrome.experimental.infobars</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 class="apiGroup" id="methods">
            <a name="methods"></a>
            <h3>Methods</h3>

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

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.experimental.infobars.show</span>(<span class="null"><span style="display: none; ">, </span><span>object</span>
                      <var><span>details</span></var></span><span class="optional"><span>, </span><span>function</span>
                      <var><span>callback</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Shows an infobar in the specified tab. The infobar will be closed automatically when the tab navigates. Use window.close() to close the infobar before then.</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" 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>integer</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The tab id for the tab to display the infobar in.</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>

          <!-- 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" 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 that contains the infobar.</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>

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

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

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

        </div>
                  </div><div>
                    <div>
          <dt>
            <var>callback</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>function</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 style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </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>
                  <div>
                  <h4>Callback function</h4>
                  <p style="display: none; ">
                    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>Window window</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
          <dt>
            <var>window</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="windows.html#type-Window">Window</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" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Contains details about the window in which the infobar was created.</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>

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

        </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 class="apiGroup" style="display: none; ">
            <a name="events"></a>
            <h3 id="events">Events</h3>

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

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

              <div class="description">
                <p class="todo">Undocumented.</p>
                <p>
                  A description from the json schema def of the event goes here.
                </p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
                    </div>
                  </div>
                </dl>

              </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>
  ©2010 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>
