I wrote all day on an improved installation script for xpi packages, so I'll share the result with you. If you want to offer Mozilla add-ons from your website in a user-friendly way, you may want to offer 2 options: - A "smart" button, which automatically detects the user's platform and presents success/failure reports after the installation - A direct download link, so users can save the file on disk for later installation or download with an advanced FTP client. I took the script from the iPlanet PSM installation page, stole a few ideas from other sites (I hope, they don't object), improved that and added several functions of my own. Basic features (startInstall): - Separate generic script file for easy maintainance - Nice results dialog or optionally HTML page - Different levels of strictness for browser check (any Mozilla, same Mozilla release, exact "vendor" release) - Graceful failure (offering browser download), if browser incompatible - Helper functions for platform detection Advanced features (genLaunch): - Autodetection of platform and corresponding package - Sniffing of package URIs from page Usage of the "Advanced features" is optional. Use |genLaunch|, if you want to provide an additional, direct download link on the page and |startInstall| otherwise. Using |startInstall(xpi, exclusive)| This mode is similar to the scripts commonly used at the moment. You have to populate an array with the URIs and names of the to-be-installed packages, the format is the same as for InstallTrigger itself. The second parameter specifies the strictness of the browser check: // for exclusive const anymozilla = 0; // any Mozilla const sameversion = 1; // this Mozilla release only, e.g. Mozilla 0.6/Netscape 6.0/Beonex Comm. 0.6 const samevendorrelease = 2; // this vendor release only, e.g. Beonex Comm. 0.6 You have to modify the script, if you want to detect another release (see todo below). The functions isWindows(), isLinux() and isMac() may help you with determining the correct URIs, badPlatform() with handling platforms you don't support. An example page is attached. Using |genLaunch(idClass, exclusive)| This is a very specialized function which does most of the above automatically. It does this by looking at the page from which is has been invoked and searching for specifically marked URIs, with which it will populate the packages array. The URIs for the XPIs have to be in a href of an <a> tag. The name attribute of the <a> tag will be used for the package name (shown in the installation confirmation dialog). The class of the <a> tag *has* to include one of the following strings: "dlWin32", "dlLinux", "dlMac", "dlAll". If the package is for Win32 only, you have to use "dlWin32". If the package is platform-independant, use "dlAll". If there are different packages on the same page (e.g. PSM and Spellchecker), you can also add an additional class for the package, e.g. "psm". You can then specify the same string as |idClass| parameter for |genLaunch|, and it will select only those packages that have this class. If there is only one type of package at the page or you want to install all packages at once, just pass an empty string as |idClass parameter. The second parameter for |genLaunch| is like that for |startInstall|. Examples attached: - Simple - Installing 2 different packages at once - Platform-Independant You can see them live at <http://www.beonex.com/communicator/version/0.6/add-ons/security/jsj.html>, <http://www.beonex.com/communicator/version/0.6/add-ons/binaries/java> and <http://www.beonex.com/communicator/version/0.6/add-ons/l10n>. Note: The examples don't work for me locally - they don't draw in the external script. But they do work on www.beonex.com. Todo: - The restart detection doesn't seem to work at all. As a workaround, I am currently *always* suggesting a restart after a successful installation, see the "XXX" in the code. YMMV. - Make browser check more customizable / flexible If you make good enhancements to the script, please post them too, so we can all take advantage of them. Happy hacking Ben Bucksch BeonexTitle: startInstall Title: genLaunch simple
Alternative download: Win32 (30K), Linux (40K)
Title: genLaunch - 2 at once / 1 of 2Alternative download: Java Win32 (7.5M), Java Linux (15M), Security fix Win32 (30K), Security fix Linux (40K)
Title: genLaunch XPAlternative download: German (220K)
install.js