MozillaZine

Dev : Extensions : install.js

From MozillaZine Knowledge Base

(Difference between revisions)
Revision as of 01:48, 19 December 2004
Asqueella (Talk | contribs)

<-- Previous diff
Current revision
Asqueella (Talk | contribs)

Line 1: Line 1:
-{{extdev}}+#REDIRECT [[Install.js]]
- +
-To make your extension install in Mozilla Suite, Mozilla Firefox pre-0.9 and Mozilla Thunderbird pre-0.7, you need to have an '''install.js''' file in the root of your XPI file. If you want your extension install in Firefox 0.9 and later and/or Thunderbird 0.7 and later ''only'', you don't need install.js, you need an [[Dev : Extensions : install.rdf|install.rdf]] instead.+
- +
-See also [http://www.xulplanet.com/tutorials/xultu/xpinstall.html] from XulPlanet's Main Tutorial.+
- +
-==XPI file structure==+
-You can use the code below (taken from Pike's extensions [http://www.pikey.me.uk/mozilla/]). It assumes the following structure of your XPI file:+
- sampleext.xpi+
- chrome\+
- sampleext.jar+
- content\+
- ...+
- locale\ (optional)+
- skin\ (optional)+
- install.js+
- install.rdf (optional -- see above)+
- +
-==Code==+
-<pre>+
-// install.js+
-// XpiInstaller+
-// By Pike (Heavily inspired by code from Henrik Gemal and Stephen Clavering)+
- +
-var XpiInstaller = {+
- // --- Editable items begin ---+
- extFullName: 'Sample Extension', // The name displayed to the user (don't include the version)+
- extShortName: 'sampleext', // The leafname of the JAR file (without the .jar part)+
- extVersion: '1.0',+
- extAuthor: 'Insert-your-name-here',+
- extLocaleNames: null, // e.g. ['en-US', 'en-GB']+
- extSkinNames: null, // e.g. ['classic', 'modern']+
- extPostInstallMessage: null, // Set to null for no post-install message+
- // --- Editable items end ---+
- +
- profileInstall: true,+
- silentInstall: false,+
- +
- install: function()+
- {+
- var jarName = this.extShortName + '.jar';+
- var profileDir = Install.getFolder('Profile', 'chrome');+
- +
- // Parse HTTP arguments+
- this.parseArguments();+
- +
- // Check if extension is already installed in profile+
- if (File.exists(Install.getFolder(profileDir, jarName)))+
- {+
- if (!this.silentInstall)+
- {+
- Install.alert('Updating existing Profile install of ' + this.extFullName + ' to version ' + this.extVersion + '.');+
- }+
- this.profileInstall = true;+
- }+
- else if (!this.silentInstall)+
- {+
- // Ask user for install location, profile or browser dir?+
- this.profileInstall = Install.confirm('Install ' + this.extFullName + ' ' + this.extVersion + ' to your Profile directory (OK) or your Browser directory (Cancel)?');+
- }+
- +
- // Init install+
- var dispName = this.extFullName + ' ' + this.extVersion;+
- var regName = '/' + this.extAuthor + '/' + this.extShortName;+
- Install.initInstall(dispName, regName, this.extVersion);+
- +
- // Find directory to install into+
- var installPath;+
- if (this.profileInstall) installPath = profileDir;+
- else installPath = Install.getFolder('chrome');+
- +
- // Add JAR file+
- Install.addFile(null, 'chrome/' + jarName, installPath, null);+
- +
- // Register chrome+
- var jarPath = Install.getFolder(installPath, jarName);+
- var installType = this.profileInstall ? Install.PROFILE_CHROME : Install.DELAYED_CHROME;+
- +
- // Register content+
- Install.registerChrome(Install.CONTENT | installType, jarPath, 'content/' + this.extShortName + '/');+
- +
- // Register locales+
- for (var locale in this.extLocaleNames)+
- {+
- var regPath = 'locale/' + this.extLocaleNames[locale] + '/' + this.extShortName + '/';+
- Install.registerChrome(Install.LOCALE | installType, jarPath, regPath);+
- }+
- +
- // Register skins+
- for (var skin in this.extSkinNames)+
- {+
- var regPath = 'skin/' + this.extSkinNames[skin] + '/' + this.extShortName + '/';+
- Install.registerChrome(Install.SKIN | installType, jarPath, regPath);+
- }+
- +
- // Perform install+
- var err = Install.performInstall();+
- if (err == Install.SUCCESS || err == Install.REBOOT_NEEDED)+
- {+
- if (!this.silentInstall && this.extPostInstallMessage)+
- {+
- Install.alert(this.extPostInstallMessage);+
- }+
- }+
- else+
- {+
- this.handleError(err);+
- return;+
- }+
- },+
- +
- parseArguments: function()+
- {+
- // Can't use string handling in install, so use if statement instead+
- var args = Install.arguments;+
- if (args == 'p=0')+
- {+
- this.profileInstall = false;+
- this.silentInstall = true;+
- }+
- else if (args == 'p=1')+
- {+
- this.profileInstall = true;+
- this.silentInstall = true;+
- }+
- },+
- +
- handleError: function(err)+
- {+
- if (!this.silentInstall)+
- {+
- Install.alert('Error: Could not install ' + this.extFullName + ' ' + this.extVersion + ' (Error code: ' + err + ')');+
- }+
- Install.cancelInstall(err);+
- }+
-};+
- +
-XpiInstaller.install();</pre>+
- +
-[[Categories:Development]]+

Current revision

  1. REDIRECT Install.js