Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: chrome/common/extensions/docs/server2/templates/articles/faq.html

Issue 10832042: Extensions Docs Server: Doc conversion script (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: everything but svn stuff Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 <h1>Frequently Asked Questions</h1>
2
3
4 <!-- -->
5
6 <p>
7 If you don't find an answer to your question here,
8 try the
9 <a href="http://code.google.com/chrome/webstore/faq.html">Chrome Web Store FAQ</ a>, the
10 <a href="http://stackoverflow.com/questions/tagged/google-chrome-extension">[goo gle-chrome-extension] tag on Stack Overflow</a>, the
11 <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions">grou p</a>, or the
12 <a href="http://www.google.com/support/chrome_webstore/">store help</a>.
13 </p>
14
15 <div id="faq-TOC">
16 <h4>General</h4>
17 <ul>
18 <li><a href="#faq-gen-01">What are Google Chrome Extensions?</a></li>
19 <li><a href="#faq-dev-01">How can I set up Chrome for extension development? </a></li>
20 <li><a href="#faq-gen-02">What technologies are used to write extensions for Chrome?</a></li>
21 <li><a href="#faq-gen-03">Are extensions fetched from the web every time the browser is loaded?</a></li>
22 <li><a href="#faq-dev-14">How do I determine which version of Chrome is depl oyed to which channel?</a></li>
23 </ul>
24 <h4>Capabilities</h4>
25 <ul>
26 <li><a href="#faq-dev-02">Can extensions make cross-domain Ajax requests?</a ></li>
27 <li><a href="#faq-dev-03">Can extensions use 3rd party web services?</a></li >
28 <li><a href="#faq-dev-07">Can extensions encode/decode JSON data?</a></li>
29 <li><a href="#faq-dev-08">Can extensions store data locally?</a></li>
30 <li><a href="#faq-dev-04">Can extensions use OAuth?</a></li>
31 <li><a href="#faq-dev-06">Can extensions load DLLs?</a></li>
32 <li><a href="#faq-dev-05">Can extensions create UI outside of the rendered w eb page?</a></li>
33 <li><a href="#faq-interact-chrome">Can extensions listen to clicks on Chrome tabs and navigation buttons?</a>
34 <li><a href="#faq-dev-11">Can two extensions communicate with each other?</a ></li>
35 <li><a href="#faq-dev-13">Can extensions use Google Analytics?</a></li>
36 <li><a href="#faq-dev-15">Can extensions modify chrome:// URLs?</a></li>
37 <li><a href="#faq-open-popups">Can extensions open browser/page action popup s without user interaction?</a></li>
38 <li><a href="#faq-persist-popups">Can extensions keep popups open after the user clicks away from them?</a></li>
39 <li><a href="#faq-lifecycle-events">Can extensions be notified when they are installed/uninstalled?</a></li>
40 </ul>
41 <h4>Development</h4>
42 <ul>
43 <li><a href="#faq-building-ui">How do I build a UI for my extension?</a>
44 <li><a href="#faq-dev-09">How much data can I store in localStorage?</a></li >
45 <li><a href="#faq-dev-10">How do I create an options menu for my application ?</a></li>
46 <li><a href="#faq-dev-12">What debugging tools are available to extension de velopers?</a></li>
47 <li><a href="#faq-dev-16">Why do wildcard matches not work for top level dom ains (TLDs)?</a></li>
48 <li><a href="#faq-management">Why does the management API not fire events wh en my extension is installed/uninstalled?</a></li>
49 <li><a href="#faq-firstrun">How can an extension determine whether it is run ning for the first time?</a></li>
50 </ul>
51 <h4>Features and bugs</h4>
52 <ul>
53 <li><a href="#faq-fea-01">I think I've found a bug! How do I make sure it ge ts fixed?</a></li>
54 <li><a href="#faq-fea-02">I have a feature request! How can I report it?</a> </li>
55 </ul>
56 </div>
57
58 <h2>General</h2>
59
60 <h3 id="faq-gen-01">What are Google Chrome Extensions?</h3>
61 <p>
62 Google Chrome Extensions are applications that run inside the
63 Chrome browser and provide additional functionality, integration with third
64 party websites or services, and customized browsing experiences.
65 </p>
66
67 <h3 id="faq-dev-01">How can I set up Chrome for extension development?</h3>
68 <p>
69 As long as you are using a version of Chrome that supports
70 extensions, you already have everything you need to start writing an
71 extension of your own.
72 You can start by turning on Developer mode.
73 </p>
74
75 <p>
76 Click the wrench icon
77 <img src="{{static}}/images/toolsmenu.gif" height="29" width="29" alt=""
78 class="nomargin" />
79 and select <b>Extensions</b> from the <b>Tools</b> menu.
80 If there's a "+" next to "Developer mode",
81 click the "+" so it turns into a "-".
82 Now you can reload extensions,
83 load an unpacked directory of files as if it were a packaged extension,
84 and more. For a complete tutorial, see
85 <a href="http://code.google.com/chrome/extensions/getstarted.html">Getting Sta rted</a>.
86 </p>
87
88 <h3 id="faq-gen-02">What technologies are used to write extensions for Chrome?</ h3>
89 <p>
90 Extensions are written using the same standard web
91 technologies that developers use to create websites. HTML is used as a
92 content markup language, CSS is used for styling, and JavaScript for
93 scripting. Because Chrome supports HTML5 and CSS3, developers can
94 use the latest open web technologies such as canvas and CSS animations in
95 their extensions. Extensions also have access to several
96 <a href="http://code.google.com/chrome/extensions/api_other.html">JavaScript A PIs</a>
97 that help perform functions like JSON encoding and interacting with the
98 browser.
99 </p>
100
101
102 <h3 id="faq-gen-03">Are extensions fetched from the web every time the browser i s loaded?</h3>
103 <p>
104 Extensions are downloaded by the Chrome browser upon install, and
105 are subsequently run off of the local disk in order to speed up
106 performance. However, if a new version of the extension is pushed online,
107 it will be automatically downloaded in the background to any users who
108 have the extension installed. Extensions may also make requests for remote
109 content at any time, in order to interact with a web service or pull new
110 content from the web.
111 </p>
112
113 <h3 id="faq-dev-14">How do I determine which version of Chrome is deployed to wh ich channel?</h3>
114 <p>
115 To determine which version of Chrome is currently available on each
116 of the different platforms, visit
117 <a href="http://omahaproxy.appspot.com">omahaproxy.appspot.com</a>. On that
118 site you will see data in a format similar to:
119 </p>
120
121 <pre>cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
122 cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
123 cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
124 linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
125 linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
126 linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
127 mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
128 mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
129 mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
130 win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
131 win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
132 win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
133 win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
134 cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
135 cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####</pre>
136
137 <p>
138 Each line represents information about a different platform and channel
139 combination. The
140 listed platforms are <code>cf</code> (Google Chrome Frame),
141 <code>linux</code>, <code>mac</code>, <code>win</code>, and
142 <code>cros</code> (Google Chrome OS). The listed
143 channels are <code>canary</code>, <code>dev</code>, <code>beta</code>,
144 and <code>stable</code>.
145 The two four-part numbers after the channel represent the current and previous
146 versions of Chrome deployed to that platform-channel
147 combination. The rest of the information is metadata about when the releases
148 were first pushed, as well as revision numbers associated with each build.
149 </p>
150
151
152 <h2>Capabilities</h2>
153
154 <h3 id="faq-dev-02">Can extensions make cross-domain Ajax requests?</h3>
155 <p>
156 Yes. Extensions can make cross-domain requests. See
157 <a href="http://code.google.com/chrome/extensions/xhr.html">this page</a>
158 for more information.
159 </p>
160
161 <h3 id="faq-dev-03">Can extensions use 3rd party web services?</h3>
162 <p>
163 Yes. Extensions are capable of making cross-domain Ajax
164 requests, so they can call remote APIs directly. APIs that provide data
165 in JSON format are particularly easy to use.
166 </p>
167
168 <h3 id="faq-dev-07">Can extensions encode/decode JSON data?</h3>
169 <p>
170 Yes, because V8 (Chrome's JavaScript engine) supports
171 JSON.stringify and JSON.parse natively, you may use these functions in your
172 extensions
173 <a href="http://json.org/js.html">as described here</a> without including
174 any additional JSON libraries in your code.
175 </p>
176
177 <h3 id="faq-dev-08">Can extensions store data locally?</h3>
178 <p>
179 Yes, extensions can use <a href="http://dev.w3.org/html5/webstorage/">localSto rage</a>
180 to store string data permanently. Using Chrome's built-in JSON
181 functions, you can store complex data structures in localStorage. For
182 extensions that need to execute SQL queries on their stored data,
183 Chrome implements
184 <a href="http://dev.w3.org/html5/webdatabase/">client side SQL databases</a>,
185 which may be used as well.
186 </p>
187
188 <h3 id="faq-dev-04">Can extensions use OAuth?</h3>
189 <p>
190 Yes, there are extensions that use OAuth to access remote data
191 APIs. Most developers find it convenient to use a
192 <a href="http://unitedheroes.net/OAuthSimple/js/OAuthSimple.js">JavaScript OAu th library</a>
193 in order to simplify the process of signing OAuth requests.
194 </p>
195
196 <h3 id="faq-dev-06">Can extensions load DLLs?</h3>
197 <p>
198 Yes, using the <a href="npapi.html">NPAPI interface</a>.
199 Because of the possibility for abuse, though, we will review your extension
200 before hosting it in the Chrome Web Store.
201 </p>
202
203 <h3 id="faq-dev-05">Can extensions create UI outside of the rendered web page?</ h3>
204 <p>
205 Yes, your extension may add buttons to the Chrome browser's user interface.
206 See <a href="browserAction.html">browser actions</a> and
207 <a href="pageAction.html">page actions</a> for more information.
208 </p>
209 <p>
210 An extension may also create popup notifications, which exist outside of the
211 browser window. See the <a href="notifications.html">desktop
212 notifications</a> documentation for more details.
213 </p>
214
215 <h3 id="faq-interact-chrome">Can extensions listen to clicks on Chrome tabs and
216 navigation buttons?</h3>
217 <p>
218 No. Extensions are limited to listening to the events described in the <a
219 href="api_index.html">API documentation</a>.
220 </p>
221
222 <h3 id="faq-dev-11">Can two extensions communicate with each other?</h3>
223 <p>
224 Yes, extensions may pass messages to other extensions. See the
225 <a href="messaging.html#external">message passing documentation</a>
226 for more information.
227 </p>
228
229 <h3 id="faq-dev-13">Can extensions use Google Analytics?</h3>
230 <p>
231 Yes, since extensions are built just like websites, they can use
232 <a href="http://www.google.com/analytics/">Google Analytics</a> to track
233 usage. However, we strongly advise you to modify the tracking code to pull
234 an HTTPS version of the Google Analytics library. See
235 <a href="tut_analytics.html">this tutorial</a> for more information on doing
236 this.
237 </p>
238
239 <h3 id="faq-dev-15">Can extensions modify chrome:// URLs?</h3>
240 <p>
241 No. The extensions APIs have been designed to minimize backwards
242 compatibility issues that can arise when new versions of the browser are
243 pushed. Allowing content scripts on <code>chrome://</code>
244 URLs would mean that developers would begin to rely on the DOM, CSS, and
245 JavaScript of these pages to stay the same. In the best case, these pages
246 could not be updated as quickly as they are being updated right now.
247 In the worst case, it could mean that an update to one
248 of these pages could cause an extension to break, causing key parts of the
249 browser to stop working for users of that extension.
250 </p>
251
252 <p>
253 The reason that <a href="override.html">replacing the content</a>
254 hosted at these URLs entirely is
255 allowed is because it forces an extension developer to implement all of the
256 functionality they want without depending on the browser's internal implementa tion
257 to stay the same.
258 </p>
259
260 <h3 id="faq-open-popups">Can extensions open browser/page action popups without
261 user interaction?</h3>
262 <p>
263 No, popups can only be opened if the user clicks on the corresponding page or
264 browser action. An extension cannot open its popup programatically.
265 </p>
266
267 <h3 id="faq-persist-popups">Can extensions keep popups open after the user
268 clicks away from them?</h3>
269 <p>
270 No, popups automatically close when the user focuses on some portion of the
271 browser outside of the popup. There is no way to keep the popup open after
272 the user has clicked away.
273 </p>
274
275 <h3 id="faq-lifecycle-events">Can extensions be notified when they are
276 installed/uninstalled?</h3>
277 <p>
278 No, there are no events an extension can listen to in order to determine
279 whether it has been installed or uninstalled. However, an extension can
280 determine when it has been run for the first time. See <a
281 href="#faq-firstrun">this FAQ entry</a> for information.
282 </p>
283
284
285 <h2>Development</h2>
286
287
288 <h3 id="faq-building-ui">How do I build a UI for my extension?</h3>
289 <p>
290 Extensions use HTML and CSS to define their user interfaces, so you can use
291 standard form controls to build your UI, or style the interface with CSS,
292 as you would a web page. Additionally, extensions can add
293 <a href="#faq-dev-05">some limited UI elements to Chrome itself.</a>
294 </p>
295
296 <h3 id="faq-dev-09">How much data can I store in localStorage?</h3>
297 <p>
298 Extensions can store up to 5MB of data in localStorage.
299 </p>
300
301 <h3 id="faq-dev-10">How do I create an options menu for my application?</h3>
302 <p>
303 You can let users set options for your extension by creating an
304 <a href="http://code.google.com/chrome/extensions/trunk/options.html">options page</a>,
305 which is a simple HTML page that will be loaded when a user clicks the
306 "options" button for your extension. This page can read and write settings
307 to localStorage, or even send options to a web server so that they can be
308 persisted across browsers.
309 </p>
310
311 <h3 id="faq-dev-12">What debugging tools are available to extension developers?< /h3>
312 <p>
313 Chrome's built-in developer tools can be used to debug extensions
314 as well as web pages. See this
315 <a href="http://code.google.com/chrome/extensions/tut_debugging.html ">tutoria l on debugging extensions</a>
316 for more information.
317 </p>
318
319 <h3 id="faq-dev-16">Why do wildcard matches not work for top level domains
320 (TLDs)?</h3>
321 <p>
322 You cannot use wildcard match patterns like <code>http://google.*/*</code>
323 to match TLDs (like <code>http://google.es</code> and
324 <code>http://google.fr</code>) due to the
325 complexity of actually restricting such a match to only the desired domains.
326 </p>
327 <p>
328 For the example of <code>http://google.*/*</code>, the Google domains would
329 be matched, but so would <code>http://google.someotherdomain.com</code>.
330 Additionally, many sites do not own all of the TLDs for their
331 domain. For an example, assume you want to use
332 <code>http://example.*/*</code> to match <code>http://example.com</code> and
333 <code>http://example.es</code>, but <code>http://example.net</code> is a
334 hostile site. If your extension has a bug, the hostile site could potentially
335 attack your extension in order to get access to your extension's increased
336 privileges.
337 </p>
338 <p>
339 You should explicitly enumerate the TLDs that you wish to run
340 your extension on.
341 </p>
342
343 <h3 id="faq-management">Why does the management API not fire events when my
344 extension is installed/uninstalled?</h3>
345 <p>
346 The <a href="management.html">management API</a> was intended to help create
347 new tab page replacement extensions. It was not intended to fire
348 install/uninstall events for the current extension.
349 </p>
350
351 <h3 id="faq-firstrun">How can an extension determine whether it is running for
352 the first time?</h3>
353 <p>
354 An extension can check to see whether it is running for the first time by
355 checking for the presence of a value in localStorage, and writing the value if
356 it does not exist. For example:
357 </p>
358
359 <pre>var firstRun = (localStorage['firstRun'] == 'true');
360 if (!firstRun) {
361 localStorage['firstRun'] = 'true';
362 }</pre>
363
364 <p>
365 Note that this check should be run in a background page, not a content script.
366 </p>
367
368
369 <h2>Features and bugs</h2>
370
371
372 <h3 id="faq-fea-01">I think I've found a bug! How do I make sure it gets
373 fixed?</h3>
374 <p>
375 While developing an extension, you may find behavior that does not
376 match the extensions documentation and may be the result of a bug in
377 Chrome. The best thing to do is to make sure an appropriate issue
378 report is filed, and the Chromium team has enough information to reproduce
379 the behavior.
380 </p>
381
382 <p>The steps you should follow to ensure this are:</p>
383
384 <ol>
385 <li>
386 Come up with a <em>minimal</em> test extension that demonstrates the issue
387 you wish to report. This extension should have as little code as possible
388 to demonstrate the bug&mdash;generally this should be 100 lines of
389 code or less. Many times, developers find that they cannot reproduce their
390 issues this way, which is a good indicator that the bug is in their own
391 code.
392 </li>
393 <li>
394 Search the issue tracker at
395 <a href="http://www.crbug.com">http://www.crbug.com</a> to see whether
396 someone has reported a similar issue. Most issues related to
397 extensions are filed under <strong>Feature=Extensions</strong>, so to
398 look for an extension bug related to the
399 chrome.tabs.executeScript function (for example), search for
400 "<code>Feature=Extensions Type=Bug chrome.tabs.executeScript</code>",
401 which will give you
402 <a href="http://code.google.com/p/chromium/issues/list?can=2&q=Feature%3DExt ensions+Type%3DBug+chrome.tabs.executeScript&colspec=ID+Stars+Pri+Area+Feature+T ype+Status+Summary+Modified+Owner+Mstone+OS&x=mstone&y=area&cells=tiles">
403 this list of results</a>.
404 </li>
405 <li>
406 If you find a bug that describes your issue, click the star icon to be
407 notified when the bug receives an update. <em>Do not respond to the
408 bug to say "me too" or ask "when will this be fixed?"</em>; such updates
409 can cause hundreds of emails to be sent. Add a comment only if you have
410 information (such as a better test case or a suggested fix) that is likely
411 to be helpful.
412 </li>
413 <li>
414 If you found no appropriate bug to star, file a new issue report at
415 <a href="http://new.crbug.com">http://new.crbug.com</a>. Be as explicit
416 as possible when filling out this form: choose a descriptive title,
417 explain the steps to reproduce the bug, and describe the expected and
418 actual behavior. Attach your test example to the report and add
419 screenshots if appropriate. The easier your report makes it for others
420 to reproduce your issue, the greater chance that your bug will be fixed
421 promptly.
422 </li>
423 <li>
424 Wait for the bug to be updated. Most new bugs are triaged within a week,
425 although it can sometimes take longer for an update. <em>Do not reply
426 to the bug to ask when the issue will be fixed.</em> If your bug has not
427 been modified after two weeks, please post a message to the
428 <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions/t opics">
429 discussion group</a> with a link back to your bug.
430 </li>
431 <li>
432 If you originally reported your bug on the discussion group and were
433 directed to this FAQ entry, reply to your original thread with a link
434 to the bug you starred or reported. This will make it easier for others
435 experiencing the same issue to find the correct bug.
436 </li>
437 </ol>
438
439 <h3 id="faq-fea-02">I have a feature request! How can I report it?</h3>
440
441 <p>If you identify a feature (especially if it's related to an experimental
442 API) that could be added to improve the extension development experience,
443 make sure an appropriate request is filed in the issue tracker.</p>
444
445 <p>The steps you should follow to ensure this are:</p>
446
447 <ol>
448 <li>
449 Search the issue tracker at
450 <a href="http://www.crbug.com">http://www.crbug.com</a> to see whether
451 someone has requested a similar feature. Most requests related to
452 extensions are filed under <strong>Feature=Extensions</strong>, so to
453 look for an extension feature request related to keyboard shortcuts
454 (for example), search
455 for "<code>Feature=Extensions Type=Feature shortcuts</code>",
456 which will give you
457 <a href="http://code.google.com/p/chromium/issues/list?can=2&q=Feature%3DExt ensions+Type%3DFeature+shortcuts&colspec=ID+Stars+Pri+Area+Feature+Type+Status+S ummary+Modified+Owner+Mstone+OS&x=mstone&y=area&cells=tiles">
458 this list of results</a>.
459 </li>
460 <li>
461 If you find a ticket that matches your request, click the star icon to be
462 notified when the bug receives an update. <em>Do not respond to the
463 bug to say "me too" or ask "when will this be implemented?"</em>; such
464 updates can cause hundreds of emails to be sent.
465 </li>
466 <li>
467 If you found no appropriate ticket to star, file a new request at
468 <a href="http://new.crbug.com">http://new.crbug.com</a>. Be as detailed
469 as possible when filling out this form: choose a descriptive title
470 and explain exactly what feature you would like and how you plan to use it.
471 </li>
472 <li>
473 Wait for the ticket to be updated. Most new requests are triaged within a
474 week, although it can sometimes take longer for an update. <em>Do not reply
475 to the ticket to ask when the feature will be added.</em> If your
476 ticket has not been modified after two weeks, please post a message to the
477 <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions/t opics">
478 discussion group</a> with a link back to your request.
479 </li>
480 <li>
481 If you originally reported your request on the discussion group and were
482 directed to this FAQ entry, reply to your original thread with a link
483 to the ticket you starred or opened. This will make it easier for others
484 with the same request to find the correct ticket.
485 </li>
486 </ol>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698