external_extensions.html revision 513209b27ff55e2841eac0e4120199c23acce758
1<!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc. Note: 2 1) The <head> information in this page is significant, should be uniform 3 across api docs and should be edited only with knowledge of the 4 templating mechanism. 5 3) All <body>.innerHTML is genereated as an rendering step. If viewed in a 6 browser, it will be re-generated from the template, json schema and 7 authored overview content. 8 4) The <body>.innerHTML is also generated by an offline step so that this 9 page may easily be indexed by search engines. 10--><html xmlns="http://www.w3.org/1999/xhtml"><head> 11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 12 <link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css"> 13 <link href="css/print.css" rel="stylesheet" type="text/css" media="print"> 14 <script type="text/javascript" src="/third_party/jstemplate/jstemplate_compiled.js"> 15 </script> 16 <script type="text/javascript" src="js/api_page_generator.js"></script> 17 <script type="text/javascript" src="js/bootstrap.js"></script> 18 <script type="text/javascript" src="js/sidebar.js"></script> 19 <title>Other Deployment Options - Google Chrome Extensions - Google Code</title></head> 20 <body> <div id="gc-container" class="labs"> 21 <div id="devModeWarning"> 22 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. 23 </div> 24 <!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION --> 25 <!-- In particular, sub-templates that recurse, must be used by allowing 26 jstemplate to make a copy of the template in this section which 27 are not operated on by way of the jsskip="true" --> 28 <div style="display:none"> 29 30 <!-- VALUE --> 31 <div id="valueTemplate"> 32 <dt> 33 <var>paramName</var> 34 <em> 35 36 <!-- TYPE --> 37 <div style="display:inline"> 38 ( 39 <span class="optional">optional</span> 40 <span class="enum">enumerated</span> 41 <span id="typeTemplate"> 42 <span> 43 <a> Type</a> 44 </span> 45 <span> 46 <span> 47 array of <span><span></span></span> 48 </span> 49 <span>paramType</span> 50 <span></span> 51 </span> 52 </span> 53 ) 54 </div> 55 56 </em> 57 </dt> 58 <dd class="todo"> 59 Undocumented. 60 </dd> 61 <dd> 62 Description of this parameter from the json schema. 63 </dd> 64 <dd> 65 This parameter was added in version 66 <b><span></span></b>. 67 You must omit this parameter in earlier versions, 68 and you may omit it in any version. If you require this 69 parameter, the manifest key 70 <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> 71 can ensure that your extension won't be run in an earlier browser version. 72 </dd> 73 74 <!-- OBJECT PROPERTIES --> 75 <dd> 76 <dl> 77 <div> 78 <div> 79 </div> 80 </div> 81 </dl> 82 </dd> 83 84 <!-- FUNCTION PARAMETERS --> 85 <dd> 86 <div></div> 87 </dd> 88 89 </div> <!-- /VALUE --> 90 91 <div id="functionParametersTemplate"> 92 <h5>Parameters</h5> 93 <dl> 94 <div> 95 <div> 96 </div> 97 </div> 98 </dl> 99 </div> 100 </div> <!-- /SUBTEMPLATES --> 101 102 <a id="top"></a> 103 <div id="skipto"> 104 <a href="#gc-pagecontent">Skip to page content</a> 105 <a href="#gc-toc">Skip to main navigation</a> 106 </div> 107 <!-- API HEADER --> 108 <table id="header" width="100%" cellspacing="0" border="0"> 109 <tbody><tr> 110 <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> 111 <td valign="middle" width="100%" style="padding-left:0.6em;"> 112 <form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em"> 113 <div id="gsc-search-box"> 114 <input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno"> 115 <input type="hidden" name="ie" value="UTF-8"> 116 <input type="text" name="q" value="" size="55"> 117 <input class="gsc-search-button" type="submit" name="sa" value="Search"> 118 <br> 119 <span class="greytext">e.g. "page action" or "tabs"</span> 120 </div> 121 </form> 122 123 <script type="text/javascript" src="http://www.google.com/jsapi"></script> 124 <script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script> 125 <script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse&t13n_langs=en"></script> 126 <script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&lang=en"></script> 127 </td> 128 </tr> 129 </tbody></table> 130 131 <div id="codesiteContent" class=""> 132 133 <a id="gc-topnav-anchor"></a> 134 <div id="gc-topnav"> 135 <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1> 136 <ul id="home" class="gc-topnav-tabs"> 137 <li id="home_link"> 138 <a href="index.html" title="Google Chrome Extensions home page">Home</a> 139 </li> 140 <li id="docs_link"> 141 <a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a> 142 </li> 143 <li id="faq_link"> 144 <a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a> 145 </li> 146 <li id="samples_link"> 147 <a href="samples.html" title="Sample extensions (with source code)">Samples</a> 148 </li> 149 <li id="group_link"> 150 <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a> 151 </li> 152 </ul> 153 </div> <!-- end gc-topnav --> 154 155 <div class="g-section g-tpl-170"> 156 <!-- SIDENAV --> 157 <div class="g-unit g-first" id="gc-toc"> 158 <ul> 159 <li><a href="getstarted.html">Getting Started</a></li> 160 <li><a href="overview.html">Overview</a></li> 161 <li><a href="whats_new.html">What's New?</a></li> 162 <li><h2><a href="devguide.html">Developer's Guide</a></h2> 163 <ul> 164 <li>Browser UI 165 <ul> 166 <li><a href="browserAction.html">Browser Actions</a></li> 167 <li><a href="contextMenus.html">Context Menus</a></li> 168 <li><a href="notifications.html">Desktop Notifications</a></li> 169 <li><a href="options.html">Options Pages</a></li> 170 <li><a href="override.html">Override Pages</a></li> 171 <li><a href="pageAction.html">Page Actions</a></li> 172 <li><a href="themes.html">Themes</a></li> 173 </ul> 174 </li> 175 <li>Browser Interaction 176 <ul> 177 <li><a href="bookmarks.html">Bookmarks</a></li> 178 <li><a href="cookies.html">Cookies</a></li> 179 <li><a href="events.html">Events</a></li> 180 <li><a href="history.html">History</a></li> 181 <li><a href="management.html">Management</a></li> 182 <li><a href="tabs.html">Tabs</a></li> 183 <li><a href="windows.html">Windows</a></li> 184 </ul> 185 </li> 186 <li>Implementation 187 <ul> 188 <li><a href="a11y.html">Accessibility</a></li> 189 <li><a href="background_pages.html">Background Pages</a></li> 190 <li><a href="content_scripts.html">Content Scripts</a></li> 191 <li><a href="xhr.html">Cross-Origin XHR</a></li> 192 <li><a href="idle.html">Idle</a></li> 193 <li><a href="i18n.html">Internationalization</a></li> 194 <li><a href="messaging.html">Message Passing</a></li> 195 <li><a href="npapi.html">NPAPI Plugins</a></li> 196 </ul> 197 </li> 198 <li>Finishing 199 <ul> 200 <li><a href="hosting.html">Hosting</a></li> 201 <li class="leftNavSelected">Other Deployment Options</li> 202 </ul> 203 </li> 204 </ul> 205 </li> 206 <li><h2><a href="tutorials.html">Tutorials</a></h2> 207 <ul> 208 <li><a href="tut_debugging.html">Debugging</a></li> 209 <li><a href="tut_analytics.html">Google Analytics</a></li> 210 <li><a href="tut_oauth.html">OAuth</a></li> 211 </ul> 212 </li> 213 <li><h2>Reference</h2> 214 <ul> 215 <li>Formats 216 <ul> 217 <li><a href="manifest.html">Manifest Files</a></li> 218 <li><a href="match_patterns.html">Match Patterns</a></li> 219 <!-- <li>Packages (.crx)</li> --> 220 </ul> 221 </li> 222 <li><a href="api_index.html">chrome.* APIs</a></li> 223 <li><a href="api_other.html">Other APIs</a></li> 224 </ul> 225 </li> 226 <li><h2><a href="samples.html">Samples</a></h2></li> 227 </ul> 228 </div> 229 <script> 230 initToggles(); 231 </script> 232 233 <div class="g-unit" id="gc-pagecontent"> 234 <div id="pageTitle"> 235 <h1 class="page_title">Other Deployment Options</h1> 236 </div> 237 <!-- TABLE OF CONTENTS --> 238 <div id="toc"> 239 <h2>Contents</h2> 240 <ol> 241 <li> 242 <a href="#prereqs">Before you begin</a> 243 <ol> 244 <li style="display: none; "> 245 <a>h3Name</a> 246 </li> 247 </ol> 248 </li><li> 249 <a href="#preferences">Using a preferences file</a> 250 <ol> 251 <li style="display: none; "> 252 <a>h3Name</a> 253 </li> 254 </ol> 255 </li><li> 256 <a href="#registry">Using the Windows registry</a> 257 <ol> 258 <li style="display: none; "> 259 <a>h3Name</a> 260 </li> 261 </ol> 262 </li><li> 263 <a href="#updating">Updating and uninstalling</a> 264 <ol> 265 <li style="display: none; "> 266 <a>h3Name</a> 267 </li> 268 </ol> 269 </li><li> 270 <a href="#faq">FAQ</a> 271 <ol> 272 <li style="display: none; "> 273 <a>h3Name</a> 274 </li> 275 </ol> 276 </li> 277 <li style="display: none; "> 278 <a href="#apiReference">API reference</a> 279 <ol> 280 <li> 281 <a href="#properties">Properties</a> 282 <ol> 283 <li> 284 <a href="#property-anchor">propertyName</a> 285 </li> 286 </ol> 287 </li> 288 <li> 289 <a href="#methods">Methods</a> 290 <ol> 291 <li> 292 <a href="#method-anchor">methodName</a> 293 </li> 294 </ol> 295 </li> 296 <li> 297 <a href="#events">Events</a> 298 <ol> 299 <li> 300 <a href="#event-anchor">eventName</a> 301 </li> 302 </ol> 303 </li> 304 <li> 305 <a href="#types">Types</a> 306 <ol> 307 <li> 308 <a href="#id-anchor">id</a> 309 </li> 310 </ol> 311 </li> 312 </ol> 313 </li> 314 </ol> 315 </div> 316 <!-- /TABLE OF CONTENTS --> 317 318 <!-- Standard content lead-in for experimental API pages --> 319 <p id="classSummary" style="display: none; "> 320 For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page. 321 </p> 322 323 <!-- STATIC CONTENT PLACEHOLDER --> 324 <div id="static"><div id="pageData-name" class="pageData">Other Deployment Options</div> 325<div id="pageData-showTOC" class="pageData">true</div> 326 327<p> 328Usually, users install their own extensions. 329But sometimes you might want an extension 330to be installed automatically. 331Here are two typical cases: 332</p> 333 334<ul> 335 <li> 336 An extension is associated with some other software, 337 and the extension should be installed 338 whenever the user installs that other software. 339 The extension could also be uninstalled 340 when the user removes that other software. 341 </li> 342 <li> 343 A network admin wants to install the same extensions 344 throughout the company. 345 </li> 346</ul> 347 348<p> 349An extension that's installed automatically is known as an 350<em>external extension</em>. 351Google Chrome supports two ways of 352installing external extensions: 353</p> 354 355<ul> 356 <li> Using a preferences JSON file </li> 357 <li> Using the Windows registry (Windows only) </li> 358</ul> 359 360<p> 361Both ways support installing an extension from a <code>.crx</code> extension 362file on the user's computer. The preferences JSON file also supports installing 363an extension hosted at an 364<a href="autoupdate.html#H2-1">update URL</a>. 365See <a href="hosting.html">hosting</a> for details on hosting an extension. 366</p> 367 368<h2 id="prereqs">Before you begin</h2> 369 370<p> 371First, package a 372<a href="packaging.html"><code>.crx</code> file</a> 373and make sure that it installs successfully. 374</p> 375<p> 376If you wish to install from an 377 <a href="autoupdate.html#H2-1">update URL</a>, ensure that the extension 378is properly <a href="hosting.html">hosted</a>. 379</p> 380 381<p> 382Then, before you edit the preferences file or the registry, 383make a note of the following: 384</p> 385 386<ul> 387 <li> The intended <b>location</b> of the extension's <code>.crx</code> file, 388 or the update URL from which it is served </li> 389 <li> The extension's <b>version</b> 390 (from the manifest file or the <b>chrome://extensions</b> page) </li> 391 <li> The extension's <b>ID</b> 392 (from the <b>chrome://extensions</b> page 393 when you've loaded the packed extension) </li> 394</ul> 395 396<p> 397The following examples assume the version is <code>1.0</code> 398and the ID is <code>aaaaaaaaaabbbbbbbbbbcccccccccc</code>. 399</p> 400 401<h2 id="preferences">Using a preferences file</h2> 402 403<p class="note"> 404<b>Windows note:</b> 405Until <a href="http://crbug.com/41902">bug 41902</a> is fixed, 406you might want to use the <a href="#registry">Windows registry</a> 407instead of the preferences file. 408 409</p> 410 411<ol> 412<li>If you are installing from a file, make the <code>.crx</code> extension 413file available to the machine you want to install the extension on. 414(Copy it to a local directory or to a network share for example, 415<code>\\server\share\extension.crx</code> 416or <code>/home/share/extension.crx</code>.) 417</li> 418<li>Locate the <code>external_extensions.json</code> file 419 under the Google Chrome installation directory. 420 If the file doesn't exist, create it. 421 The location depends on the operating system. 422 <dl> 423 <dt> Windows: </dt> 424 <dd> <code><em>chrome_root</em>\Application\<em>chrome_version</em>\Extensions\</code> 425 <br> 426 Example: <code>c:\Users\Me\AppData\Local\Google\Chrome\Application\6.0.422.0\Extensions\</code> 427 </dd> 428 <dt> Mac OS X: </dt> 429 <dd> <code>/Applications/Google Chrome.app/Contents/Extensions/</code> </dd> 430 <dt> Linux: </dt> 431 <dd> <code>/opt/google/chrome/extensions/</code> <br> 432 <b>Note:</b> Use <code>chmod</code> if necessary 433 to make sure that <code>extensions/external_extensions.json</code> 434 is world-readable. 435 </dd> 436 </dl> 437</li> 438<li> Add an entry to <code>external_extensions.json</code> 439for your extension's ID. If you are installing from a file, specify the 440extension's location and version with fields named "external_crx" and 441"external_version". 442 443Example: 444<pre>{ 445 "aaaaaaaaaabbbbbbbbbbcccccccccc": { 446 "external_crx": "/home/share/extension.crx", 447 "external_version": "1.0" 448 } 449}</pre> 450 451<p class="note"> 452<b>Note:</b> 453You need to escape 454each <code>\</code> character in the location. 455For example, 456<code>\\server\share\extension.crx</code> would be 457<code>"\\\\server\\share\\extension.crx"</code>. 458</p> 459<p> 460If you are installing from an update URL, specify the extension's update URL 461with field name "external_update_url". 462</p> 463Example: 464<pre>{ 465 "aaaaaaaaaabbbbbbbbbbcccccccccc": { 466 "external_update_url": "http://myhost.com/mytestextension/updates.xml" 467 } 468}</pre> 469</li> 470 471<li>Save the JSON file. </li> 472<li>Launch Google Chrome and go to <b>chrome://extensions</b>; 473you should see the extension listed. </li> 474</ol> 475 476<h2 id="registry">Using the Windows registry</h2> 477 478<ol> 479<li>Make the <code>.crx</code> extension file available 480to the machine you want to install the extension on. 481(Copy it to a local directory or to a network share — 482for example, <code>\\server\share\extension.crx</code>.) 483</li> 484<li>Find or create the following key in the 485registry: 486<ul> 487 <li> 32-bit Windows: <code>HKEY_LOCAL_MACHINE\Software\Google\Chrome\Extensions</code> </li> 488 <li> 64-bit Windows: <code>HKEY_LOCAL_MACHINE\Software\Wow6432Node\Google\Chrome\Extensions</code> </li> 489</ul> 490</li> 491 492<li>Create a new key (folder) 493under the <b>Extensions</b> key with the 494same name as the ID of your extension 495(for example, <code>aaaaaaaaaabbbbbbbbbbcccccccccc</code>). 496</li> 497<li>Create two string values (<code>REG_SZ</code>) named "path" and "version", 498 and set them to the extension's location and version. 499 For example: 500<ul> 501 <li>path: <code>\\server\share\extension.crx</code> </li> 502 <li>version: <code>1.0</code> </li> 503</ul> 504</li> 505<li>Launch the browser and go to 506<b>chrome://extensions</b>; you should 507see the extension listed. </li> 508</ol> 509 510<h2 id="updating">Updating and uninstalling</h2> 511 512<p>Google Chrome scans the metadata entries 513in the preferences and registry 514each time the browser starts, and makes 515any necessary changes to the installed 516external extensions. </p> 517 518<p>To update your extension to a new version, 519update the file, and then update the version 520in the preferences or registry. </p> 521 522<p>To uninstall your extension 523(for example, if your software is uninstalled), 524remove the metadata from the preferences file 525or registry. </p> 526 527<h2 id="faq">FAQ</h2> 528 529<p> 530This section answers common questions about external extensions. 531</p> 532 533<br> 534 535<p><b>Can I specify a URL as a path to the external extension?</b> </p> 536<p>Yes, if you host the extension as explained in 537<a href="hosting.html">hosting</a>. 538</p> 539 540<br> 541 542<p><b>What are some common mistakes when installing with the preferences 543file?</b></p> 544<ul> 545 <li> 546 Not specifying the same id/version 547 as the one listed in the <code>.crx</code> </li> 548 <li> 549 <code>external_extensions.json</code> is in the wrong location </li> 550 <li> 551 Syntax error in JSON file 552 (forgetting to separate entries with comma or 553 leaving a trailing comma somewhere) </li> 554 <li> 555 Extra curly brackets around the top level dictionary </li> 556 <li> 557 JSON file entry points to the wrong path 558 to the <code>.crx</code> (or path specified but no filename) </li> 559 <li> 560 Backslashes in UNC path not escaped 561 (for example, <code>"\\server\share\file"</code> is wrong; 562 it should be <code>"\\\\server\\share\\extension"</code>) </li> 563 <li> 564 Permissions problems on a network share </li> 565</ul> 566 567<br> 568 569<p><b>What are some common mistakes when installing with the registry?</b> </p> 570<ul> 571 <li>Not specifying the same id/version 572 as the one listed in the <code>.crx</code> </li> 573 <li>Key created in the wrong location in the registry </li> 574 <li>Registry entry points to the wrong path to the <code>.crx</code> file 575 (or path specified but no filename) </li> 576 <li>Permissions problems on a network share </li> 577</ul> 578 579<br> 580 581<p><b>What if the user uninstalls the extension?</b> </p> 582<p>If the user uninstalls the extension through the UI, it will no 583longer be installed or updated on each startup. In other words, the 584external extension is blacklisted. </p> 585 586<br> 587 588<p><b>How do I get off the blacklist?</b> </p> 589<p>If the user uninstalls your extension, you should respect that 590decision. However, if you (the developer) accidentally uninstalled 591your extension through the UI, 592you can remove the blacklist tag 593by installing the extension normally 594through the UI, and then uninstalling it. </p> 595</div> 596 597 <!-- API PAGE --> 598 <div class="apiPage" style="display: none; "> 599 <a name="apiReference"></a> 600 <h2>API reference: chrome.apiname </h2> 601 602 <!-- PROPERTIES --> 603 <div class="apiGroup"> 604 <a name="properties"></a> 605 <h3 id="properties">Properties</h3> 606 607 <div> 608 <a></a> 609 <h4>getLastError</h4> 610 <div class="summary"> 611 <!-- Note: intentionally longer 80 columns --> 612 <span>chrome.extension</span><span>lastError</span> 613 </div> 614 <div> 615 </div> 616 </div> 617 618 </div> <!-- /apiGroup --> 619 620 <!-- METHODS --> 621 <div class="apiGroup" id="methods"> 622 <a name="methods"></a> 623 <h3>Methods</h3> 624 625 <!-- iterates over all functions --> 626 <div class="apiItem"> 627 <a></a> <!-- method-anchor --> 628 <h4>method name</h4> 629 630 <div class="summary"><span>void</span> 631 <!-- Note: intentionally longer 80 columns --> 632 <span>chrome.module.methodName</span>(<span><span>, </span><span></span> 633 <var><span></span></var></span>)</div> 634 635 <div class="description"> 636 <p class="todo">Undocumented.</p> 637 <p> 638 A description from the json schema def of the function goes here. 639 </p> 640 641 <!-- PARAMETERS --> 642 <h4>Parameters</h4> 643 <dl> 644 <div> 645 <div> 646 </div> 647 </div> 648 </dl> 649 650 <!-- RETURNS --> 651 <h4>Returns</h4> 652 <dl> 653 <div> 654 <div> 655 </div> 656 </div> 657 </dl> 658 659 <!-- CALLBACK --> 660 <div> 661 <div> 662 <h4>Callback function</h4> 663 <p> 664 The callback <em>parameter</em> should specify a function 665 that looks like this: 666 </p> 667 <p> 668 If you specify the <em>callback</em> parameter, it should 669 specify a function that looks like this: 670 </p> 671 672 <!-- Note: intentionally longer 80 columns --> 673 <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre> 674 <dl> 675 <div> 676 <div> 677 </div> 678 </div> 679 </dl> 680 </div> 681 </div> 682 683 <!-- MIN_VERSION --> 684 <p> 685 This function was added in version <b><span></span></b>. 686 If you require this function, the manifest key 687 <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> 688 can ensure that your extension won't be run in an earlier browser version. 689 </p> 690 </div> <!-- /description --> 691 692 </div> <!-- /apiItem --> 693 694 </div> <!-- /apiGroup --> 695 696 <!-- EVENTS --> 697 <div class="apiGroup"> 698 <a name="events"></a> 699 <h3 id="events">Events</h3> 700 701 <!-- iterates over all events --> 702 <div class="apiItem"> 703 <a></a> 704 <h4>event name</h4> 705 706 <div class="summary"> 707 <!-- Note: intentionally longer 80 columns --> 708 <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>); 709 </div> 710 711 <div class="description"> 712 <p class="todo">Undocumented.</p> 713 <p> 714 A description from the json schema def of the event goes here. 715 </p> 716 717 <!-- PARAMETERS --> 718 <h4>Parameters</h4> 719 <dl> 720 <div> 721 <div> 722 </div> 723 </div> 724 </dl> 725 726 </div> <!-- /decription --> 727 728 </div> <!-- /apiItem --> 729 730 </div> <!-- /apiGroup --> 731 732 <!-- TYPES --> 733 <div class="apiGroup"> 734 <a name="types"></a> 735 <h3 id="types">Types</h3> 736 737 <!-- iterates over all types --> 738 <div class="apiItem"> 739 <a></a> 740 <h4>type name</h4> 741 742 <div> 743 </div> 744 745 </div> <!-- /apiItem --> 746 747 </div> <!-- /apiGroup --> 748 749 </div> <!-- /apiPage --> 750 </div> <!-- /gc-pagecontent --> 751 </div> <!-- /g-section --> 752 </div> <!-- /codesiteContent --> 753 <div id="gc-footer" --=""> 754 <div class="text"> 755 <p> 756 Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>, 757 the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons 758 Attribution 3.0 License</a>, and code samples are licensed under the 759 <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. 760 </p> 761 <p> 762 ©2010 Google 763 </p> 764 765<!-- begin analytics --> 766<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script> 767<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script> 768 769<script type="text/javascript"> 770 // chrome doc tracking 771 try { 772 var engdocs = _gat._getTracker("YT-10763712-2"); 773 engdocs._trackPageview(); 774 } catch(err) {} 775 776 // code.google.com site-wide tracking 777 try { 778 _uacct="UA-18071-1"; 779 _uanchor=1; 780 _uff=0; 781 urchinTracker(); 782 } 783 catch(e) {/* urchinTracker not available. */} 784</script> 785<!-- end analytics --> 786 </div> 787 </div> <!-- /gc-footer --> 788 </div> <!-- /gc-container --> 789</body></html> 790