hosting.html revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
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>Hosting - 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 class="leftNavSelected">Hosting</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><a href="tut_debugging.html">Debugging</a></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">Hosting</h1>
245      </div>
246        <!-- TABLE OF CONTENTS -->
247        <div id="toc" style="display: none; ">
248          <h2>Contents</h2>
249          <ol>
250            <li>
251              <a>h2Name</a>
252              <ol>
253                <li>
254                  <a>h3Name</a>
255                </li>
256              </ol>
257            </li>
258              <li>
259                <a href="#apiReference">API reference</a>
260                <ol>
261                  <li>
262                    <a href="#properties">Properties</a>
263                    <ol>
264                      <li>
265                        <a href="#property-anchor">propertyName</a>
266                      </li>
267                    </ol>
268                  </li>
269                  <li>
270                    <a href="#methods">Methods</a>
271                    <ol>
272                      <li>
273                        <a href="#method-anchor">methodName</a>
274                      </li>
275                    </ol>
276                  </li>
277                  <li>
278                    <a href="#events">Events</a>
279                    <ol>
280                      <li>
281                        <a href="#event-anchor">eventName</a>
282                      </li>
283                    </ol>
284                  </li>
285                  <li>
286                    <a href="#types">Types</a>
287                    <ol>
288                      <li>
289                        <a href="#id-anchor">id</a>
290                      </li>
291                    </ol>
292                  </li>
293                </ol>
294              </li>
295          </ol>
296        </div>
297        <!-- /TABLE OF CONTENTS -->
298
299        <!-- Standard content lead-in for experimental API pages -->
300        <p id="classSummary" style="display: none; ">
301          For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page.
302        </p>
303
304        <!-- STATIC CONTENT PLACEHOLDER -->
305        <div id="static"><div id="pageData-name" class="pageData">Hosting</div>
306
307<p>
308This page tells you how to host <code>.crx</code> files
309on your own server.
310If you distribute your extension, app, or theme solely through the
311<a href="http://chrome.google.com/webstore">Chrome Web Store</a>,
312you don't need this page.
313Instead, consult the store help and
314<a href="http://code.google.com/chrome/webstore/index.html">developer documentation</a>.
315<!-- PENDING: add a link to the help -->
316</p>
317
318<p class="note">
319<strong>Note:</strong>
320If you've already published extensions to the 
321<a href="https://chrome.google.com/extensions">Extensions Gallery</a>,
322they will be merged into the store.
323</p>
324
325<p>
326By convention, extensions,
327installable web apps, and themes are served—whether
328by the Chrome Web Store or by a custom server—as
329<code>.crx</code> files.
330When you upload a ZIP file with the
331<a href="https://chrome.google.com/webstore/developer/dashboard">Chrome Developer Dashboard</a>,
332the dashboard creates the <code>.crx</code> file for you.
333</p>
334
335<p>
336If you aren't publishing using the dashboard,
337you need to create the <code>.crx</code> file yourself,
338as described in <a href="packaging.html">Packaging</a>.
339You can also specify
340<a href="autoupdate.html">autoupdate</a> information to ensure that
341your users will have the latest copy of the <code>.crx</code> file.
342</p>
343
344<p>
345A server that hosts <code>.crx</code> files
346must use appropriate HTTP headers,
347so that users can install the file
348by clicking a link to it.
349</p>
350
351<p>
352Google Chrome considers a file to be installable
353if <b>either</b> of the following is true:
354</p>
355
356<ul>
357  <li>
358    The file has the content type
359    <code>application/x-chrome-extension</code>
360  </li>
361  <li>
362    The file suffix is <code>.crx</code>
363    and <b>both</b> of the following are true:
364    <ul>
365      <li>
366        The file <b>is not</b> served with
367        the HTTP header <code>X-Content-Type-Options: nosniff</code>
368      </li>
369      <li>
370        The file <b>is</b> served
371        with one of the following content types:
372        <ul>
373          <li> empty string </li>
374          <li> "text/plain" </li>
375          <li> "application/octet-stream" </li>
376          <li> "unknown/unknown" </li>
377          <li> "application/unknown" </li>
378          <li> "*/*" </li>
379        </ul>
380      </li>
381    </ul>
382  </li>
383</ul>
384
385<p>
386The most common reason for failing to recognize an installable file
387is that the server sends the header
388<code>X-Content-Type-Options: no sniff</code>.
389The second most common reason
390is that the server sends an unknown content type—one
391that isn't in the previous list.
392To fix an HTTP header issue,
393either change the configuration of the server
394or try hosting the <code>.crx</code> file at another server.
395</p>
396</div>
397
398        <!-- API PAGE -->
399        <div class="apiPage" style="display: none; ">
400        <a name="apiReference"></a>
401        <h2>API reference: chrome.apiname </h2>
402
403          <!-- PROPERTIES -->
404          <div class="apiGroup">
405            <a name="properties"></a>
406            <h3 id="properties">Properties</h3>
407
408            <div>
409              <a></a>
410              <h4>getLastError</h4>
411              <div class="summary">
412                <!-- Note: intentionally longer 80 columns -->
413                <span>chrome.extension</span><span>lastError</span>
414              </div>
415              <div>
416              </div>
417            </div>
418
419          </div> <!-- /apiGroup -->
420
421          <!-- METHODS -->
422          <div class="apiGroup" id="methods">
423            <a name="methods"></a>
424            <h3>Methods</h3>
425
426            <!-- iterates over all functions -->
427            <div class="apiItem">
428              <a></a> <!-- method-anchor -->
429              <h4>method name</h4>
430
431              <div class="summary"><span>void</span>
432                  <!-- Note: intentionally longer 80 columns -->
433                  <span>chrome.module.methodName</span>(<span><span>, </span><span></span>
434                      <var><span></span></var></span>)</div>
435
436              <div class="description">
437                <p class="todo">Undocumented.</p>
438                <p>
439                  A description from the json schema def of the function goes here.
440                </p>
441
442                <!-- PARAMETERS -->
443                <h4>Parameters</h4>
444                <dl>
445                  <div>
446                    <div>
447                    </div>
448                  </div>
449                </dl>
450
451                <!-- RETURNS -->
452                <h4>Returns</h4>
453                <dl>
454                  <div>
455                    <div>
456                    </div>
457                  </div>
458                </dl>
459
460                <!-- CALLBACK -->
461                <div>
462                  <div>
463                  <h4>Callback function</h4>
464                  <p>
465                    The callback <em>parameter</em> should specify a function
466                    that looks like this:
467                  </p>
468                  <p>
469                    If you specify the <em>callback</em> parameter, it should
470                    specify a function that looks like this:
471                  </p>
472
473                  <!-- Note: intentionally longer 80 columns -->
474                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
475                  <dl>
476                    <div>
477                      <div>
478                      </div>
479                    </div>
480                  </dl>
481                  </div>
482                </div>
483
484                <!-- MIN_VERSION -->
485                <p>
486                  This function was added in version <b><span></span></b>.
487                  If you require this function, the manifest key
488                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
489                  can ensure that your extension won't be run in an earlier browser version.
490                </p>
491              </div> <!-- /description -->
492
493            </div>  <!-- /apiItem -->
494
495          </div>  <!-- /apiGroup -->
496
497          <!-- EVENTS -->
498          <div class="apiGroup">
499            <a name="events"></a>
500            <h3 id="events">Events</h3>
501
502            <!-- iterates over all events -->
503            <div class="apiItem">
504              <a></a>
505              <h4>event name</h4>
506
507              <div class="summary">
508                <!-- Note: intentionally longer 80 columns -->
509                <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>);
510              </div>
511
512              <div class="description">
513                <p class="todo">Undocumented.</p>
514                <p>
515                  A description from the json schema def of the event goes here.
516                </p>
517
518                <!-- PARAMETERS -->
519                <h4>Parameters</h4>
520                <dl>
521                  <div>
522                    <div>
523                    </div>
524                  </div>
525                </dl>
526
527              </div> <!-- /decription -->
528
529            </div> <!-- /apiItem -->
530
531          </div> <!-- /apiGroup -->
532
533          <!-- TYPES -->
534          <div class="apiGroup">
535            <a name="types"></a>
536            <h3 id="types">Types</h3>
537
538            <!-- iterates over all types -->
539            <div class="apiItem">
540              <a></a>
541              <h4>type name</h4>
542
543              <div>
544              </div>
545
546            </div> <!-- /apiItem -->
547
548          </div> <!-- /apiGroup -->
549
550        </div> <!-- /apiPage -->
551      </div> <!-- /gc-pagecontent -->
552    </div> <!-- /g-section -->
553  </div> <!-- /codesiteContent -->
554    <div id="gc-footer" --="">
555      <div class="text">
556  <p>
557  Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
558  the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
559  Attribution 3.0 License</a>, and code samples are licensed under the
560  <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
561  </p>
562  <p>
563  ©2010 Google
564  </p>
565
566<!-- begin analytics -->
567<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
568<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>
569
570<script type="text/javascript">
571  // chrome doc tracking
572  try {
573    var engdocs = _gat._getTracker("YT-10763712-2");
574    engdocs._trackPageview();
575  } catch(err) {}
576
577  // code.google.com site-wide tracking
578  try {
579    _uacct="UA-18071-1";
580    _uanchor=1;
581    _uff=0;
582    urchinTracker();
583  }
584  catch(e) {/* urchinTracker not available. */}
585</script>
586<!-- end analytics -->
587      </div>
588    </div> <!-- /gc-footer -->
589  </div> <!-- /gc-container -->
590</body></html>
591