a better way to detect Java WebStart

So, just as I wrote that I wouldn't be posting much in future, I thought I would quickly post this little tidbit. There are various ways described online that you can use to detect if a client has Java WebStart installed. The problem is all of them require you to mix in VBScript for Internet Explorer and then use Javascript for the other browsers. There is a way you can support Internet Explorer and still use only Javascript. Check it out:

function jwsInstalled() {
    // For Internet Explorer.
    if (navigator.userAgent.indexOf('MSIE') > -1) { 
        try { 
            var jws = new ActiveXObject('JavaWebStart.isInstalled'); 
            return true; 
        } 
        catch (e) { 
            return false; 
        } 
    } 

    // Firefox is happy with "x-java-jnlp-file". For Chrome and Safari 
    // this does not work, instead I just check for "x-java-vm". 
    // If they have a recent JVM installed, then they usually also have 
    // Java WebStart installed.
            
    return navigator.mimeTypes && 
           navigator.mimeTypes.length &&
                (navigator.mimeTypes['application/x-java-jnlp-file'] != null ||
                 navigator.mimeTypes['application/x-java-vm'] != null);
}

I use this to popup a little dialog and tell users to download a new JRE if Java WebStart is not installed. It works pretty well. And yes, it's 2009 and I'm still using Java WebStart ... although I do have a good reason for it. :-)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

a better way still

Turns out there is actually an even better way: the new Deployment Toolkit in Java 6.

It includes a Javascript file hosted by Sun that you can include in your web apps. It includes Javascript functions to install the latest JRE, deploy a JNLP file, deploy an applet, etc.