tut_debugging.html revision ac1e49eb6695f711d72215fcdf9388548942a00d
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>Tutorial: Debugging - 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="omnibox.html">Omnibox</a></li> 170 <li><a href="options.html">Options Pages</a></li> 171 <li><a href="override.html">Override Pages</a></li> 172 <li><a href="pageAction.html">Page Actions</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><a href="external_extensions.html">Other Deployment Options</a></li> 202 </ul> 203 </li> 204 </ul> 205 </li> 206 <li><h2><a href="apps.html">Packaged Apps</a></h2></li> 207 <li><h2><a href="tutorials.html">Tutorials</a></h2> 208 <ul> 209 <li class="leftNavSelected">Debugging</li> 210 <li><a href="tut_analytics.html">Google Analytics</a></li> 211 <li><a href="tut_oauth.html">OAuth</a></li> 212 </ul> 213 </li> 214 <li><h2>Reference</h2> 215 <ul> 216 <li>Formats 217 <ul> 218 <li><a href="manifest.html">Manifest Files</a></li> 219 <li><a href="match_patterns.html">Match Patterns</a></li> 220 </ul> 221 </li> 222 <li><a href="permission_warnings.html">Permission Warnings</a></li> 223 <li><a href="api_index.html">chrome.* APIs</a></li> 224 <li><a href="api_other.html">Other APIs</a></li> 225 </ul> 226 </li> 227 <li><h2><a href="samples.html">Samples</a></h2></li> 228 <div class="line"> </div> 229 <li><h2>More</h2> 230 <ul> 231 <li><a href="http://code.google.com/chrome/webstore/docs/index.html">Chrome Web Store</a></li> 232 <li><a href="http://code.google.com/chrome/apps/docs/developers_guide.html">Hosted Apps</a></li> 233 <li><a href="themes.html">Themes</a></li> 234 </ul> 235 </li> 236 </ul> 237 </div> 238 <script> 239 initToggles(); 240 </script> 241 242 <div class="g-unit" id="gc-pagecontent"> 243 <div id="pageTitle"> 244 <h1 class="page_title">Tutorial: Debugging</h1> 245 </div> 246 <!-- TABLE OF CONTENTS --> 247 <div id="toc"> 248 <h2>Contents</h2> 249 <ol> 250 <li> 251 <a href="#extension-info"> View extension information </a> 252 <ol> 253 <li style="display: none; "> 254 <a>h3Name</a> 255 </li> 256 </ol> 257 </li><li> 258 <a href="#inspect-popup"> Inspect the popup </a> 259 <ol> 260 <li style="display: none; "> 261 <a>h3Name</a> 262 </li> 263 </ol> 264 </li><li> 265 <a href="#debug"> Use the debugger </a> 266 <ol> 267 <li style="display: none; "> 268 <a>h3Name</a> 269 </li> 270 </ol> 271 </li><li> 272 <a href="#summary">Summary</a> 273 <ol> 274 <li style="display: none; "> 275 <a>h3Name</a> 276 </li> 277 </ol> 278 </li><li> 279 <a href="#next">Now what?</a> 280 <ol> 281 <li style="display: none; "> 282 <a>h3Name</a> 283 </li> 284 </ol> 285 </li> 286 <li style="display: none; "> 287 <a href="#apiReference">API reference</a> 288 <ol> 289 <li> 290 <a href="#properties">Properties</a> 291 <ol> 292 <li> 293 <a href="#property-anchor">propertyName</a> 294 </li> 295 </ol> 296 </li> 297 <li> 298 <a href="#methods">Methods</a> 299 <ol> 300 <li> 301 <a href="#method-anchor">methodName</a> 302 </li> 303 </ol> 304 </li> 305 <li> 306 <a href="#events">Events</a> 307 <ol> 308 <li> 309 <a href="#event-anchor">eventName</a> 310 </li> 311 </ol> 312 </li> 313 <li> 314 <a href="#types">Types</a> 315 <ol> 316 <li> 317 <a href="#id-anchor">id</a> 318 </li> 319 </ol> 320 </li> 321 </ol> 322 </li> 323 </ol> 324 </div> 325 <!-- /TABLE OF CONTENTS --> 326 327 <!-- Standard content lead-in for experimental API pages --> 328 <p id="classSummary" style="display: none; "> 329 For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page. 330 </p> 331 332 <!-- STATIC CONTENT PLACEHOLDER --> 333 <div id="static"><div id="pageData-name" class="pageData">Tutorial: Debugging</div> 334<div id="pageData-showTOC" class="pageData">true</div> 335 336<p> 337This tutorial introduces you to using 338Google Chrome's built-in Developer Tools 339to interactively debug an extension. 340</p> 341 342 343<h2 id="extension-info"> View extension information </h2> 344 345<p> 346To follow this tutorial, you need 347the Hello World extension that was featured in 348<a href="getstarted.html">Getting Started</a>. 349In this section, 350you'll load the extension 351and take a look at its information 352in the Extensions page. 353</p> 354 355<ol> 356 <li> 357 <p> 358 Load the Hello World extension if it isn't already running. 359 If the extension is running, 360 you'll see the Hello World icon 361 <img src="examples/tutorials/getstarted/icon.png" width="19" height="19" alt="" style="margin:0"> 362 to the right of 363 your browser's address bar. 364 </p> 365 366 <p> 367 If the Hello World extension isn't already running, 368 find the extension files and load them. 369 If you don't have a handy copy of the files, 370 extract them from this 371 <a href="examples/tutorials/getstarted/getstarted.zip">ZIP file</a>. 372 See Getting Started if you need 373 <a href="getstarted.html#load-ext">instructions 374 for loading the extension</a>. 375 </p> 376 </li> 377 378 <li> 379 Go to the Extensions page 380 (<b>chrome://extensions</b>), 381 and make sure the page is in Developer mode. 382 </li> 383 384 <li> 385 Look at the Hello World extension's information on that page. 386 You can see details such as the extension's 387 name, description, and ID. 388 </li> 389</ol> 390 391<h2 id="inspect-popup"> Inspect the popup </h2> 392 393<p> 394As long as your browser is in Developer mode, it's easy to inspect popups. 395</p> 396 397<ol> 398 <li> 399 Go to the Extensions page (<b>chrome://extensions</b>), and make sure Developer 400 mode is still enabled. The Extensions page doesn't need to be open 401 for the following to work. The browser remembers the setting, 402 even when the page isn't shown. 403 </li> 404 <li> 405 Right-click the Hello World icon 406 <img src="examples/tutorials/getstarted/icon.png" width="19" height="19" alt="" style="margin:0"> 407 and choose the <b>Inspect popup</b> menu item. The popup appears, 408 and a Developer Tools window like the following should display the code 409 for <b>popup.html</b>. 410 411 <p> 412 <img src="images/devtools-1.gif" alt="" width="500" height="294"> 413 </p> 414 The popup remains open as long as the Developer Tools window does. 415 </li> 416 <li> 417 If the <strong>Scripts</strong> button isn't already selected, 418 click it. 419 <!-- [PENDING: can we omit this step?] --> 420 </li> 421 <li> 422 Click the console button 423 <img src="images/console-button.gif" style="margin:0; padding:0" align="absmiddle" width="26" height="22" alt="">(second 424 from left, 425 at the bottom of the Developer Tools window) 426 so that you can see both the code and the console. 427 </li> 428</ol> 429 430<h2 id="debug"> Use the debugger </h2> 431 432<p> 433In this section, 434you'll follow the execution of the popup page 435as it adds images to itself. 436</p> 437 438<ol> 439 <li> 440 Set a breakpoint inside the image-adding loop 441 by searching for the string <b>img.src</b> 442 and clicking the number of the line where it occurs 443 (for example, <strong>37</strong>): 444 <p> 445 <img src="images/devtools-2.gif" alt="" width="500" height="294"> 446 </p> 447 </li> 448 449 <li> 450 Make sure you can see the <b>popup.html</b> tab. 451 It should show 20 "hello world" images. 452 </li> 453 454 <li> 455 At the console prompt, reload the popup page 456 by entering <b>location.reload(true)</b>: 457 458<pre>> <b>location.reload(true)</b> 459</pre> 460 461 <p> 462 The popup page goes blank as it begins to reload, 463 and its execution stops at line 37. 464 </p> 465 </li> 466 467 <li> 468 In the upper right part of the tools window, 469 you should see the local scope variables. 470 This section shows the current values of all variables in the current scope. 471 For example, in the following screenshot 472 the value of <code>i</code> is 0, and 473 <code>photos</code> is a node list 474 that contains at least a few elements. 475 (In fact, it contains 20 elements at indexes 0 through 19, 476 each one representing a photo.) 477 478 <p> 479 <img src="images/devtools-localvars.gif" alt="" width="225" height="215"> 480 </p> 481 </li> 482 483 <li> 484 Click the play/pause button 485 <img src="images/play-button.gif" style="margin:0; padding:0" align="absmiddle" width="22" height="20" alt="">(near 486 the top right of the Developer Tools window) 487 to go through the image-processing loop a single time. 488 Each time you click that button, 489 the value of <code>i</code> increments and 490 another icon appears in the popup page. 491 For example, when <code>i</code> is 10, 492 the popup page looks something like this: 493 </li> 494 495 <p> 496 <img src="images/devtools-3.gif" width="500" height="245" alt="the popup page with 10 images"> 497 </p> 498 499 <li> 500 Use the buttons next to the play/pause button 501 to step over, into, and out of function calls. 502 To let the page finish loading, 503 click line <b>37</b> to disable the breakpoint, 504 and then press play/pause 505 <img src="images/play-button.gif" style="margin:0; padding:0" align="absmiddle" width="22" height="20" alt="">to 506 continue execution. 507 </li> 508 509</ol> 510 511 512<h2 id="summary">Summary</h2> 513 514<p> 515This tutorial demonstrated some techniques you can use 516to debug your extensions: 517</p> 518 519<ul> 520 <li> 521 Find your extension's ID and links to its pages in 522 the <b>Extensions</b> page 523 (<b>chrome://extensions</b>). 524 </li> 525 <li> 526 View hard-to-reach pages 527 (and any other file in your extension) using 528 <b>chrome-extension://</b><em>extensionId</em><b>/</b><em>filename</em>. 529 </li> 530 <li> 531 Use Developer Tools to inspect 532 and step through a page's JavaScript code. 533 </li> 534 <li> 535 Reload the currently inspected page from the console 536 using <b>location.reload(true)</b>. 537 </li> 538</ul> 539 540 541<h2 id="next">Now what?</h2> 542 543<p> 544Now that you've been introduced to debugging, 545here are suggestions for what to do next: 546</p> 547 548<ul> 549 <li> 550 Watch the extensions video 551 <a href="http://www.youtube.com/watch?v=IP0nMv_NI1s&feature=PlayList&p=CA101D6A85FE9D4B&index=5">Developing and Debugging</a>. 552 </li> 553 <li> 554 Try installing and inspecting other extensions, 555 such as the 556 <a href="samples.html">samples</a>. 557 </li> 558 <li> 559 Try using widely available debugging APIs such as 560 <code>console.log()</code> and <code>console.error()</code> 561 in your extension's JavaScript code. 562 Example: <code>console.log("Hello, world!")</code> 563 </li> 564 <li> 565 Follow the <a href="http://www.chromium.org/devtools/google-chrome-developer-tools-tutorial">Developer Tools tutorial</a>, 566 explore the 567 <a href="http://www.chromium.org/devtools">Developer Tools site</a>, 568 and watch some video tutorials. 569 </li> 570</ul> 571 572<!-- [PENDING: do something to help people debug content scripts, which show up in blue] --> 573 574<p> 575For more ideas, 576see the <a href="getstarted.html#summary">Now what?</a> section 577of Getting Started. 578</p> 579</div> 580 581 <!-- API PAGE --> 582 <div class="apiPage" style="display: none; "> 583 <a name="apiReference"></a> 584 <h2>API reference: chrome.apiname </h2> 585 586 <!-- PROPERTIES --> 587 <div class="apiGroup"> 588 <a name="properties"></a> 589 <h3 id="properties">Properties</h3> 590 591 <div> 592 <a></a> 593 <h4>getLastError</h4> 594 <div class="summary"> 595 <!-- Note: intentionally longer 80 columns --> 596 <span>chrome.extension</span><span>lastError</span> 597 </div> 598 <div> 599 </div> 600 </div> 601 602 </div> <!-- /apiGroup --> 603 604 <!-- METHODS --> 605 <div class="apiGroup" id="methods"> 606 <a name="methods"></a> 607 <h3>Methods</h3> 608 609 <!-- iterates over all functions --> 610 <div class="apiItem"> 611 <a></a> <!-- method-anchor --> 612 <h4>method name</h4> 613 614 <div class="summary"><span>void</span> 615 <!-- Note: intentionally longer 80 columns --> 616 <span>chrome.module.methodName</span>(<span><span>, </span><span></span> 617 <var><span></span></var></span>)</div> 618 619 <div class="description"> 620 <p class="todo">Undocumented.</p> 621 <p> 622 A description from the json schema def of the function goes here. 623 </p> 624 625 <!-- PARAMETERS --> 626 <h4>Parameters</h4> 627 <dl> 628 <div> 629 <div> 630 </div> 631 </div> 632 </dl> 633 634 <!-- RETURNS --> 635 <h4>Returns</h4> 636 <dl> 637 <div> 638 <div> 639 </div> 640 </div> 641 </dl> 642 643 <!-- CALLBACK --> 644 <div> 645 <div> 646 <h4>Callback function</h4> 647 <p> 648 The callback <em>parameter</em> should specify a function 649 that looks like this: 650 </p> 651 <p> 652 If you specify the <em>callback</em> parameter, it should 653 specify a function that looks like this: 654 </p> 655 656 <!-- Note: intentionally longer 80 columns --> 657 <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre> 658 <dl> 659 <div> 660 <div> 661 </div> 662 </div> 663 </dl> 664 </div> 665 </div> 666 667 <!-- MIN_VERSION --> 668 <p> 669 This function was added in version <b><span></span></b>. 670 If you require this function, the manifest key 671 <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> 672 can ensure that your extension won't be run in an earlier browser version. 673 </p> 674 </div> <!-- /description --> 675 676 </div> <!-- /apiItem --> 677 678 </div> <!-- /apiGroup --> 679 680 <!-- EVENTS --> 681 <div class="apiGroup"> 682 <a name="events"></a> 683 <h3 id="events">Events</h3> 684 685 <!-- iterates over all events --> 686 <div class="apiItem"> 687 <a></a> 688 <h4>event name</h4> 689 690 <div class="summary"> 691 <!-- Note: intentionally longer 80 columns --> 692 <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>); 693 </div> 694 695 <div class="description"> 696 <p class="todo">Undocumented.</p> 697 <p> 698 A description from the json schema def of the event goes here. 699 </p> 700 701 <!-- PARAMETERS --> 702 <h4>Parameters</h4> 703 <dl> 704 <div> 705 <div> 706 </div> 707 </div> 708 </dl> 709 710 </div> <!-- /decription --> 711 712 </div> <!-- /apiItem --> 713 714 </div> <!-- /apiGroup --> 715 716 <!-- TYPES --> 717 <div class="apiGroup"> 718 <a name="types"></a> 719 <h3 id="types">Types</h3> 720 721 <!-- iterates over all types --> 722 <div class="apiItem"> 723 <a></a> 724 <h4>type name</h4> 725 726 <div> 727 </div> 728 729 </div> <!-- /apiItem --> 730 731 </div> <!-- /apiGroup --> 732 733 </div> <!-- /apiPage --> 734 </div> <!-- /gc-pagecontent --> 735 </div> <!-- /g-section --> 736 </div> <!-- /codesiteContent --> 737 <div id="gc-footer" --=""> 738 <div class="text"> 739 <p> 740 Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>, 741 the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons 742 Attribution 3.0 License</a>, and code samples are licensed under the 743 <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>. 744 </p> 745 <p> 746 ©2011 Google 747 </p> 748 749<!-- begin analytics --> 750<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script> 751<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script> 752 753<script type="text/javascript"> 754 // chrome doc tracking 755 try { 756 var engdocs = _gat._getTracker("YT-10763712-2"); 757 engdocs._trackPageview(); 758 } catch(err) {} 759 760 // code.google.com site-wide tracking 761 try { 762 _uacct="UA-18071-1"; 763 _uanchor=1; 764 _uff=0; 765 urchinTracker(); 766 } 767 catch(e) {/* urchinTracker not available. */} 768</script> 769<!-- end analytics --> 770 </div> 771 </div> <!-- /gc-footer --> 772 </div> <!-- /gc-container --> 773</body></html> 774