A better way to detect Java Webstart / by Frank Worsley

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. :-)