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
Beonex

install.js

Title: startInstall
Title: genLaunch simple

Alternative download: Win32 (30K), Linux (40K)

Title: genLaunch - 2 at once / 1 of 2

Alternative download: Java Win32 (7.5M), Java Linux (15M), Security fix Win32 (30K), Security fix Linux (40K)

Title: genLaunch XP

Alternative download: German (220K)

Reply via email to