Compare Revisions

Building an extension

Change Revisions

Revision 33503:

Revision 33503 by Sheppy on

Revision 33504:

Revision 33504 by Anthony d93 on

Building an extension
Building an extension
NeedsTechnicalReview, Extensions, Add-ons, NeedsEditorialReview, NeedsUpdate
NeedsTechnicalReview, Extensions, Add-ons, NeedsEditorialReview, NeedsUpdate

Revision 33503
Revision 33504
nn276    <div class="note">
277      <p>
278        <b>Important</b> For those of you who are just just start
 >ing out with programming, please note that the files "chrome.mani
 >fest", "sample.xul" and "install.rdf" are usually default saved w
 >ith ANSI encoding. THIS WILL NOT WORK, you have to change the enc
 >oding to Unicode because if you save it with ANSI encoding, it wi
 >ll save the file as, "install.rdf.txt".
279      </p>
276    <h4 name="Package">280      <h4 name="Package">
277      Package281        Package
278    </h4>282      </h4>
279    <p>283      <p>
280      Now that your extension works, you can <a href="en/Extensio284        Now that your extension works, you can <a href="en/Extens
>n_Packaging">package</a> it for deployment and installation.>ion_Packaging">package</a> it for deployment and installation.
281    </p>285      </p>
282    <p>286      <p>
283      Zip up the <b>contents</b> of your extension's folder (not 287        Zip up the <b>contents</b> of your extension's folder (no
>the extension folder itself), and rename the zip file to have a .>t the extension folder itself), and rename the zip file to have a
>xpi extension. In Windows XP, you can do this easily by selecting> .xpi extension. In Windows XP, you can do this easily by selecti
> all the files and subfolders in your extension folder, right cli>ng all the files and subfolders in your extension folder, right c
>ck and choose "Send To -&gt; Compressed (Zipped) Folder". A .zip >lick and choose "Send To -&gt; Compressed (Zipped) Folder". A .zi
>file will be created for you. Just rename it and you're done!>p file will be created for you. Just rename it and you're done!
284    </p>288      </p>
285    <p>289      <p>
286      On Mac OS X, you can right-click on the <b>contents</b> of 290        On Mac OS X, you can right-click on the <b>contents</b> o
>the extension's folder and choose "Create Archive of..." to make >f the extension's folder and choose "Create Archive of..." to mak
>the zip file. However, since Mac OS X adds hidden files to folder>e the zip file. However, since Mac OS X adds hidden files to fold
>s in order to track file metadata, you should instead use the Ter>ers in order to track file metadata, you should instead use the T
>minal, delete the hidden files (whose names begin with a period),>erminal, delete the hidden files (whose names begin with a period
> and then use the <tt>zip</tt> command on the command line to cre>), and then use the <tt>zip</tt> command on the command line to c
>ate the zip file.>reate the zip file.
287    </p>291      </p>
288    <p>292      <p>
289      On Linux, you would likewise use the command-line Zip tool.293        On Linux, you would likewise use the command-line Zip too
290    </p>294      </p>
291    <p>295      <p>
292      If you have the 'Extension Builder' extension installed it 296        If you have the 'Extension Builder' extension installed i
>can compile the .xpi file for you (Tools -&gt; Extension Develope>t can compile the .xpi file for you (Tools -&gt; Extension Develo
>r -&gt; Extension Builder). Merely navigate to the directory wher>per -&gt; Extension Builder). Merely navigate to the directory wh
>e your extension is (install.rdf etc.), and hit the Build Extensi>ere your extension is (install.rdf etc.), and hit the Build Exten
>on button. This extension has a slew of tools to make development>sion button. This extension has a slew of tools to make developme
> easier.>nt easier.
293    </p>297      </p>
294    <p>298      <p>
295      Now upload the .xpi file to your server, making sure it's s299        Now upload the .xpi file to your server, making sure it's
>erved as <tt>application/x-xpinstall</tt>. You can link to it and> served as <tt>application/x-xpinstall</tt>. You can link to it a
> allow people to download and install it in Firefox. For the purp>nd allow people to download and install it in Firefox. For the pu
>oses of just testing our .xpi file we can just drag it into the e>rposes of just testing our .xpi file we can just drag it into the
>xtensions window via Tools -&gt; Extensions, or Tools -&gt; Add-o> extensions window via Tools -&gt; Extensions, or Tools -&gt; Add
>ns in FireFox 2.>-ons in FireFox 2.
296    </p>300      </p>
297    <h5 name="Installing_from_a_web_page">301      <h5 name="Installing_from_a_web_page">
298      Installing from a web page302        Installing from a web page
299    </h5>303      </h5>
300    <p>304      <p>
301      There are a variety of ways you can install extensions from305        There are a variety of ways you can install extensions fr
> web pages, including direct linking to the XPI files and using t>om web pages, including direct linking to the XPI files and using
>he InstallTrigger object. Extension and web authors are encourage> the InstallTrigger object. Extension and web authors are encoura
>d to use the <a href="en/Installing_Extensions_and_Themes_From_We>ged to use the <a href="en/Installing_Extensions_and_Themes_From_
>b_Pages">InstallTrigger method</a> to install XPIs, as it provide>Web_Pages">InstallTrigger method</a> to install XPIs, as it provi
>s the best experience to users.>des the best experience to users.
302    </p>306      </p>
303    <h5 name="">307      <h5 name="">
304      Using addons.mozilla.org308        Using
305    </h5>309      </h5>
306    <p>310      <p>
307      Mozilla Update is a distribution site where you can host yo311        Mozilla Update is a distribution site where you can host 
>ur extension for free. Your extension will be hosted on Mozilla's>your extension for free. Your extension will be hosted on Mozilla
> mirror network to guarantee your download even though it might b>'s mirror network to guarantee your download even though it might
>e very popular. Mozilla's site also provides users easier install> be very popular. Mozilla's site also provides users easier insta
>ation, and will automatically make your newer versions available >llation, and will automatically make your newer versions availabl
>to users of your existing versions when you upload them. In addit>e to users of your existing versions when you upload them. In add
>ion Mozilla Update allows users to comment and provide feedback o>ition Mozilla Update allows users to comment and provide feedback
>n your extension. It is highly recommended that you use Mozilla U> on your extension. It is highly recommended that you use Mozilla
>pdate to distribute your extensions!> Update to distribute your extensions!
308    </p>312      </p>
309    <p>313      <p>
310      Visit to create an ac314        Visit to create an 
>count and begin distributing your extensions!>account and begin distributing your extensions!
311    </p>315      </p>
312    <p>316      <p>
313      <i>Note:</i> Your Extension will be passed faster and downl317        <i>Note:</i> Your Extension will be passed faster and dow
>oaded more if you have a good description and some screenshots of>nloaded more if you have a good description and some screenshots 
> the extension in action.>of the extension in action.
314    </p>318      </p>
315    <h5 name="Registering_Extensions_in_the_Windows_Registry">319      <h5 name="Registering_Extensions_in_the_Windows_Registry">
316      Registering Extensions in the Windows Registry320        Registering Extensions in the Windows Registry
317    </h5>321      </h5>
318    <p>322      <p>
319      On Windows, information about extensions can be added to th323        On Windows, information about extensions can be added to 
>e registry, and the extensions will automatically be picked up th>the registry, and the extensions will automatically be picked up 
>e next time the applications starts. This allows application inst>the next time the applications starts. This allows application in
>allers to easily add integration hooks as extensions. See <a href>stallers to easily add integration hooks as extensions. See <a hr
>="en/Adding_Extensions_using_the_Windows_Registry">Adding Extensi>ef="en/Adding_Extensions_using_the_Windows_Registry">Adding Exten
>ons using the Windows Registry</a> for more information.>sions using the Windows Registry</a> for more information.
320    </p>324      </p>
321    <h4 name="More_on_XUL_Overlays">325      <h4 name="More_on_XUL_Overlays">
322      More on XUL Overlays326        More on XUL Overlays
323    </h4>327      </h4>
324    <p>328      <p>
325      In addition to appending UI widgets to the merge point, you329        In addition to appending UI widgets to the merge point, y
> can use XUL fragments within Overlays to:>ou can use XUL fragments within Overlays to:
326    </p>330      </p>
327    <ul>331      <ul>
328      <li>Modify attributes on the merge point, e.g. <tt>&lt;stat332        <li>Modify attributes on the merge point, e.g. <tt>&lt;st
>usbar id="status-bar" hidden="true"/&gt;</tt> (hides the status b>atusbar id="status-bar" hidden="true"/&gt;</tt> (hides the status
>ar)> bar)
329      </li>333        </li>
330      <li>Remove the merge point from the master document, e.g. <334        <li>Remove the merge point from the master document, e.g.
>tt>&lt;statusbar id="status-bar" removeelement="true"/&gt;</tt>> <tt>&lt;statusbar id="status-bar" removeelement="true"/&gt;</tt>
331      </li>335        </li>
332      <li>Control the position of the inserted widgets:336        <li>Control the position of the inserted widgets:
333      </li>337        </li>
334    </ul>338      </ul>
335    <pre class="eval">339      <pre class="eval">
n342    <h4 name="Creating_New_User_Interface_Components">n346      <h4 name="Creating_New_User_Interface_Components">
343      Creating New User Interface Components347        Creating New User Interface Components
344    </h4>348      </h4>
345    <p>349      <p>
346      You can create your own windows and dialog boxes as separat350        You can create your own windows and dialog boxes as separ
>e .xul files, provide functionality by implementing user actions >ate .xul files, provide functionality by implementing user action
>in .js files, using DOM methods to manipulate UI widgets. You can>s in .js files, using DOM methods to manipulate UI widgets. You c
> use style rules in .css files to attach images, set colors etc.>an use style rules in .css files to attach images, set colors etc
347    </p>351      </p>
348    <p>352      <p>
349      View the <a href="en/XUL">XUL</a> documentation for more re353        View the <a href="en/XUL">XUL</a> documentation for more 
>sources for XUL developers.>resources for XUL developers.
350    </p>354      </p>
351    <h4 name="Defaults_Files">355      <h4 name="Defaults_Files">
352      Defaults Files356        Defaults Files
353    </h4>357      </h4>
354    <p>358      <p>
355      Defaults files that you use to seed a user's profile with s359        Defaults files that you use to seed a user's profile with
>hould be placed in <tt>defaults/</tt> under the root of your exte> should be placed in <tt>defaults/</tt> under the root of your ex
>nsion's folder hierarchy. Default preferences .js files should be>tension's folder hierarchy. Default preferences .js files should 
> stored in <tt>defaults/preferences/</tt> - when you place them h>be stored in <tt>defaults/preferences/</tt> - when you place them
>ere they will be automatically loaded by Firefox's preferences sy> here they will be automatically loaded by Firefox's preferences 
>stem when it starts so that you can access them using the <a href>system when it starts so that you can access them using the <a hr
>="en/Preferences_API">Preferences API</a>.>ef="en/Preferences_API">Preferences API</a>.
356    </p>360      </p>
357    <p>361      <p>
358      An example default preference file:362        An example default preference file:
359    </p>363      </p>
360    <pre class="eval">364      <pre class="eval">
n365    <h4 name="XPCOM_Components">n369      <h4 name="XPCOM_Components">
366      XPCOM Components370        XPCOM Components
367    </h4>371      </h4>
368    <p>372      <p>
369      Firefox supports <a href="en/XPCOM">XPCOM</a> components in373        Firefox supports <a href="en/XPCOM">XPCOM</a> components 
> extensions. You can create your own components easily in JavaScr>in extensions. You can create your own components easily in JavaS
>ipt or in C++ (using the <a href="en/Gecko_SDK">Gecko SDK</a>).>cript or in C++ (using the <a href="en/Gecko_SDK">Gecko SDK</a>).
370    </p>374      </p>
371    <p>375      <p>
372      Place all of your .js or .dll files in the <tt>components/<376        Place all of your .js or .dll files in the <tt>components
>/tt> directory - they are automatically registered the first time>/</tt> directory - they are automatically registered the first ti
> Firefox runs after your extension is installed.>me Firefox runs after your extension is installed.
373    </p>377      </p>
374    <p>378      <p>
375      For more information see <a href="en/How_to_Build_an_XPCOM_379        For more information see <a href="en/How_to_Build_an_XPCO
>Component_in_Javascript">How to Build an XPCOM Component in Javas>M_Component_in_Javascript">How to Build an XPCOM Component in Jav
>cript</a>, <a href="en/How_to_build_a_binary_XPCOM_component_usin>ascript</a>, <a href="en/How_to_build_a_binary_XPCOM_component_us
>g_Visual_Studio">How to build a binary XPCOM component using Visu>ing_Visual_Studio">How to build a binary XPCOM component using Vi
>al Studio</a> and the <a href="en/Creating_XPCOM_Components">Crea>sual Studio</a> and the <a href="en/Creating_XPCOM_Components">Cr
>ting XPCOM Components</a> book.>eating XPCOM Components</a> book.
376    </p>380      </p>
377    <h5 name="Application_Command_Line">381      <h5 name="Application_Command_Line">
378      Application Command Line382        Application Command Line
379    </h5>383      </h5>
380    <p>384      <p>
381      One of the possible uses of custom XPCOM components is addi385        One of the possible uses of custom XPCOM components is ad
>ng a command line handler to Firefox or Thunderbird. You can use >ding a command line handler to Firefox or Thunderbird. You can us
>this technique to run your extension as an application:>e this technique to run your extension as an application:
382    </p>386      </p>
383    <pre class="eval">387      <pre class="eval">
n386    <p>n390      <p>
387      <span class="comment">I should move the useful parts of thi391        <span class="comment">I should move the useful parts of t
>s to the Command Line page. -Nickolay This is done by adding a co>his to the Command Line page. -Nickolay This is done by adding a 
>mponent containing the function... function NSGetModule(comMgr, f>component containing the function... function NSGetModule(comMgr,
>ileSpec) { return myAppHandlerModule; } This function is run by f> fileSpec) { return myAppHandlerModule; } This function is run by
>irefox each time firefox is started. Firefox registers the myAppH> firefox each time firefox is started. Firefox registers the myAp
>andlerModule's by calling its 'registerSelf()'. Then it obtains t>pHandlerModule's by calling its 'registerSelf()'. Then it obtains
>he myAppHandlerModule's handler factory via 'getClassObject()'. T> the myAppHandlerModule's handler factory via 'getClassObject()'.
>he handler factory is then used to create the handle using its 'c> The handler factory is then used to create the handle using its 
>reateInstance(). Finally, the handle's 'handle(cmdline)' processe>'createInstance(). Finally, the handle's 'handle(cmdline)' proces
>s the command line cmdline's handleFlagWithParam() and handleFlag>ses the command line cmdline's handleFlagWithParam() and handleFl
>().</span> See <a href="en/Chrome/Command_Line">Chrome: Command L>ag().</span> See <a href="en/Chrome/Command_Line">Chrome: Command
>ine</a> and a <a class="external" href="http://forums.mozillazine> Line</a> and a <a class="external" href="http://forums.mozillazi
>.org/viewtopic.php?t=365297">forum discussion</a> for details.>">forum discussion</a> for details.
388    </p>392      </p>
389    <h4 name="Localization">393      <h4 name="Localization">
390      Localization394        Localization
391    </h4>395      </h4>
392    <p>396      <p>
393      To support more than one language, you should separate stri397        To support more than one language, you should separate st
>ngs from your content using <a href="en/XUL_Tutorial/Localization>rings from your content using <a href="en/XUL_Tutorial/Localizati
>">entities</a> and <a href="en/XUL_Tutorial/Property_Files">strin>on">entities</a> and <a href="en/XUL_Tutorial/Property_Files">str
>g bundles</a>. It is much easier to do this while you are develop>ing bundles</a>. It is much easier to do this while you are devel
>ing your extension, rather than come back and do it later!>oping your extension, rather than come back and do it later!
394    </p>398      </p>
395    <p>399      <p>
396      Localization information is stored in the locale directory 400        Localization information is stored in the locale director
>for the extension. For example, to add a locale to our sample ext>y for the extension. For example, to add a locale to our sample e
>ension, create a directory named "locale" in chrome (where the "c>xtension, create a directory named "locale" in chrome (where the 
>ontent" directory is located) and add the following line to the c>"content" directory is located) and add the following line to the
>hrome.manifest file:> chrome.manifest file:
397    </p>401      </p>
398    <pre class="eval">402      <pre class="eval">
n401    <p>n405      <p>
402      To create localizable attribute values in XUL, you put the 406        To create localizable attribute values in XUL, you put th
>values in a <tt>.ent</tt> (or a <tt>.dtd</tt>) file, which should>e values in a <tt>.ent</tt> (or a <tt>.dtd</tt>) file, which shou
> be placed in the locale directory and looks like this:>ld be placed in the locale directory and looks like this:
403    </p>407      </p>
404    <pre class="eval">408      <pre class="eval">
n408    <p>n412      <p>
409      And then include it at the top of your XUL document (but un413        And then include it at the top of your XUL document (but 
>derneath the "&lt;?xml version"1.0"?&gt;") like so:>underneath the "&lt;?xml version"1.0"?&gt;") like so:
410    </p>414      </p>
411    <pre class="eval">415      <pre class="eval">
n414    <p>n418      <p>
415      where <code><b>window</b></code> is the <code><a href="en/D419        where <code><b>window</b></code> is the <code><a href="en
>OM/element.localName">localName</a></code> value of the root elem>/DOM/element.localName">localName</a></code> value of the root el
>ent of the XUL document, and the value of the <tt>SYSTEM</tt> pro>ement of the XUL document, and the value of the <tt>SYSTEM</tt> p
>perty is the chrome URI to the entity file. For our sample extens>roperty is the chrome URI to the entity file. For our sample exte
>ion, the root element is <code><b>overlay</b></code>.>nsion, the root element is <code><b>overlay</b></code>.
416    </p>420      </p>
417    <p>421      <p>
418      To use the entities, modify your XUL to look like this:422        To use the entities, modify your XUL to look like this:
419    </p>423      </p>
420    <pre class="eval">424      <pre class="eval">
n423    <p>n427      <p>
424      The Chrome Registry will make sure the entity file is loade428        The Chrome Registry will make sure the entity file is loa
>d from the localization bundle corresponding to the selected loca>ded from the localization bundle corresponding to the selected lo
425    </p>429      </p>
426    <p>430      <p>
427      For strings that you use in script, create a .properties fi431        For strings that you use in script, create a .properties 
>le, a text file that has a string on each line in this format:>file, a text file that has a string on each line in this format:
428    </p>432      </p>
429    <pre class="eval">433      <pre class="eval">
t432    <p>t436      <p>
433      and then use <tt><a href="en/NsIStringBundleService">nsIStr437        and then use <tt><a href="en/NsIStringBundleService">nsIS
>ingBundleService</a></tt>/<tt><a href="en/NsIStringBundle">nsIStr>tringBundleService</a></tt>/<tt><a href="en/NsIStringBundle">nsIS
>ingBundle</a></tt> or the <tt><a class="external" href="http://xu>tringBundle</a></tt> or the <tt><a class="external" href="http://
>undle&gt;</a></tt> tag to load the values into script.>gbundle&gt;</a></tt> tag to load the values into script.
434    </p>438      </p>
435    <h4 name="Understanding_the_Browser">439      <h4 name="Understanding_the_Browser">
436      Understanding the Browser440        Understanding the Browser
437    </h4>441      </h4>
438    <p>442      <p>
439      Use the <a href="en/DOM_Inspector">DOM Inspector</a> (not p443        Use the <a href="en/DOM_Inspector">DOM Inspector</a> (not
>art of the <b>Standard</b> Firefox installation, you must reinsta> part of the <b>Standard</b> Firefox installation, you must reins
>ll with the Custom install path and choose <b>Developer Tools</b>>tall with the Custom install path and choose <b>Developer Tools</
> if there is not a "DOM Inspector" item in your browser's Tools m>b> if there is not a "DOM Inspector" item in your browser's Tools
>enu) to inspect the browser window or any other XUL window you wa> menu) to inspect the browser window or any other XUL window you 
>nt to extend.>want to extend.
440    </p>444      </p>
441    <p>445      <p>
442      Use the point-and-click node finder button at the top left 446        Use the point-and-click node finder button at the top lef
>of the DOM Inspector's toolbar to click on a node in the XUL wind>t of the DOM Inspector's toolbar to click on a node in the XUL wi
>ow visually to select it. When you do this the DOM inspector's DO>ndow visually to select it. When you do this the DOM inspector's 
>M hierarchy tree view will jump to the node you clicked on.>DOM hierarchy tree view will jump to the node you clicked on.
443    </p>447      </p>
444    <p>448      <p>
445      Use the DOM Inspector's right side panel to discover merge 449        Use the DOM Inspector's right side panel to discover merg
>points with ids that you can use to insert your elements from ove>e points with ids that you can use to insert your elements from o
>rlays. If you cannot discover an element with an id that you can >verlays. If you cannot discover an element with an id that you ca
>merge into, you may need to attach a script in your overlay and i>n merge into, you may need to attach a script in your overlay and
>nsert your elements when the <tt>load</tt> event fires on the mas> insert your elements when the <tt>load</tt> event fires on the m
>ter XUL window.>aster XUL window.
446    </p>450      </p>
447    <h4 name="Debugging_Extensions">451      <h4 name="Debugging_Extensions">
448      Debugging Extensions452        Debugging Extensions
449    </h4>453      </h4>
450    <p>454      <p>
451      <b>Analytical Tools for Debugging</b>455        <b>Analytical Tools for Debugging</b>
452    </p>456      </p>
453    <ul>457      <ul>
454      <li>The <a href="en/DOM_Inspector">DOM Inspector</a> - insp458        <li>The <a href="en/DOM_Inspector">DOM Inspector</a> - in
>ect attributes, DOM structure, CSS style rules that are in effect>spect attributes, DOM structure, CSS style rules that are in effe
> (e.g. find out why your style rules don't seem to be working for>ct (e.g. find out why your style rules don't seem to be working f
> an element - an invaluable tool!)>or an element - an invaluable tool!)
455      </li>459        </li>
456      <li>460        <li>
457        <a href="en/Venkman">Venkman</a> - set breakpoints in Jav461          <a href="en/Venkman">Venkman</a> - set breakpoints in J
>aScript and inspect call stacks>avaScript and inspect call stacks
458      </li>462        </li>
459      <li>463        <li>
460        <code><a href="en/Core_JavaScript_1.5_Reference/Objects/F464          <code><a href="en/Core_JavaScript_1.5_Reference/Objects
>unction/arguments/callee">arguments.callee</a>.<a href="en/Core_J>/Function/arguments/callee">arguments.callee</a>.<a href="en/Core
>> in JavaScript - access a function's call stack>de> in JavaScript - access a function's call stack
461      </li>465        </li>
462    </ul>466      </ul>
463    <p>467      <p>
464      <b>printf debugging</b>468        <b>printf debugging</b>
465    </p>469      </p>
466    <ul>470      <ul>
467      <li>Run Firefox with <tt>-console</tt> at the command line 471        <li>Run Firefox with <tt>-console</tt> at the command lin
>and use <code><a href="en/DOM/window.dump">dump</a>("string")</co>e and use <code><a href="en/DOM/window.dump">dump</a>("string")</
>de> (see the link for details)>code> (see the link for details)
468      </li>472        </li>
469      <li>Use <code><a href="en/NsIConsoleService">nsIConsoleServ473        <li>Use <code><a href="en/NsIConsoleService">nsIConsoleSe
>ice</a></code> to log to the JavaScript console>rvice</a></code> to log to the JavaScript console
470      </li>474        </li>
471    </ul>475      </ul>
472    <p>476      <p>
473      <b>Advanced debugging</b>477        <b>Advanced debugging</b>
474    </p>478      </p>
475    <ul>479      <ul>
476      <li>Run a debug Firefox build and set breakpoints in Firefo480        <li>Run a debug Firefox build and set breakpoints in Fire
>x itself, or your C++ components. For the experienced developer, >fox itself, or your C++ components. For the experienced developer
>this is often the fastest way to diagnose a problem. See <a href=>, this is often the fastest way to diagnose a problem. See <a hre
>"en/Build_Documentation">Build Documentation</a> and <a href="en/>f="en/Build_Documentation">Build Documentation</a> and <a href="e
>Developing_Mozilla">Developing Mozilla</a> for more information.>n/Developing_Mozilla">Developing Mozilla</a> for more information
477      </li>481        </li>
478      <li>See <a href="en/Debugging_a_XULRunner_Application">Debu482        <li>See <a href="en/Debugging_a_XULRunner_Application">De
>gging a XULRunner Application</a> for more helpful tips.>bugging a XULRunner Application</a> for more helpful tips.
479      </li>483        </li>
480    </ul>484      </ul>
481    <h3 name="Quick_Start">485      <h3 name="Quick_Start">
482      Quick Start486        Quick Start
483    </h3>487      </h3>
484    <p>488      <p>
485      You can use the <a class="external" href="http://ted.mielcz489        You can use the <a class="external" href="http://ted.miel
>">Extension Wizard</a> online >">Extension Wizard</a> onlin
>tool to generate a simple extension to work with.>e tool to generate a simple extension to work with.
486    </p>490      </p>
487    <p>491      <p>
488      A <a class="external" href="        A <a class="external" href="
>f/">Hello World extension</a> similar to what you c>uff/">Hello World extension</a> similar to what you
>an generate with the Extension Wizard is explained line-by-line i> can generate with the Extension Wizard is explained line-by-line
>n <a class="external" href="> in <a class="external" href="
>rted_with_extension_development">another tutorial from MozillaZin>tarted_with_extension_development">another tutorial from MozillaZ
>e Knowledge Base</a>.>ine Knowledge Base</a>.
489    </p>493      </p>
490    <h3 name="Further_information">494      <h3 name="Further_information">
491      Further information495        Further information
492    </h3>496      </h3>
493    <ul>497      <ul>
494      <li>498        <li>
495        <a href="en/Extension_FAQ">Extension FAQ</a>499          <a href="en/Extension_FAQ">Extension FAQ</a>
496      </li>500        </li>
497      <li>501        <li>
498        <a href="en/Extensions">Extensions</a>502          <a href="en/Extensions">Extensions</a>
499      </li>503        </li>
504      </ul>
500    </ul>{{ wiki.languages( { "de": "de/Erweiterung_erstellen", "505    </div>{{ wiki.languages( { "de": "de/Erweiterung_erstellen", 
>es": "es/Creando_una_extensi\u00f3n", "fr": "fr/Construire_une_ex>"es": "es/Creando_una_extensi\u00f3n", "fr": "fr/Construire_une_e
>tension", "ja": "ja/Building_an_Extension", "pl": "pl/Tworzymy_ro>xtension", "ja": "ja/Building_an_Extension", "pl": "pl/Tworzymy_r
>zszerzenie", "pt": "pt/Construir_uma_Extens\u00e3o", "it": "it/Sv>ozszerzenie", "pt": "pt/Construir_uma_Extens\u00e3o", "it": "it/S
>iluppare_un\'Estensione", "zh-cn": "cn/\u6784\u5efa\u4e00\u4e2a\u>viluppare_un\'Estensione", "zh-cn": "cn/\u6784\u5efa\u4e00\u4e2a\
>6269\u5c55" } ) }}>u6269\u5c55" } ) }}

Back to History