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>&gt; <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