views:

896

answers:

3

Is there a quick way to get a list in JavaScript of the available Active X plugins?

I need to do a test to see if a plugin has been installed before I actually try to run it.

In effect I want to create a page that says 'Plugin Installed and properly Working' or have it fail gracefully.

I'm not sure how to have it fail gracefully if the plugin is not available.

+2  A: 

Just try it.

try {
  var plugin = new ActiveXObject('SomeActiveX');
} catch (e) {
  alert("Error"); // Or some other error code
}
musicfreak
Thanks. I would prefer to be able to see if it exists without actually having to instantiate is. But it looks like it is the only way.
Tom Hubbard
Correct. In IE, there is no way to check for an addons existence without trying to use it.
EricLaw -MSFT-
A: 

Maybe this script can help

function detectPlugin() {
// allow for multiple checks in a single pass
var daPlugins = detectPlugin.arguments;

// consider pluginFound to be false until proven true
var pluginFound = false;

// if plugins array is there and not fake
if (navigator.plugins && navigator.plugins.length > 0) {
var pluginsArrayLength = navigator.plugins.length;

// for each plugin...
for (pluginsArrayCounter=0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter++ ) {

    // loop through all desired names and check each against the current plugin name
    var numFound = 0;
    for(namesCounter=0; namesCounter < daPlugins.length; namesCounter++) {

 // if desired plugin name is found in either plugin name or description
 if( (navigator.plugins[pluginsArrayCounter].name.indexOf(daPlugins[namesCounter]) >= 0) || 
     (navigator.plugins[pluginsArrayCounter].description.indexOf(daPlugins[namesCounter]) >= 0) ) {
     // this name was found
     numFound++;
 }   
    }
    // now that we have checked all the required names against this one plugin,
    // if the number we found matches the total number provided then we were successful
    if(numFound == daPlugins.length) {
 pluginFound = true;
 // if we've found the plugin, we can stop looking through at the rest of the plugins
 break;
    }
}
}
return pluginFound;} // detectPlugin

Call it using this for exemple

pluginFound = detectPlugin('Shockwave','Flash');
João Guilherme
Does this work in IE8? I was playing around with the navigator object earlier and the length of plugins was zero.
Tom Hubbard
It seems to be working because this page http://www.unibanco.com.br/vste/_exc/_hom/index.asp is using the script with no problems.
João Guilherme
Turns out that the plugins array is not populated in Internet Explorer.
Tom Hubbard
He asked about ActiveX plugins, not browser plugins.
musicfreak
+1  A: 

The object tag will display whatever is inside it if the object cannot be instantiated:

<object ...>
 <p>
 So sorry, you need to install the object.  Get it <a href="...">here</a>.
 </p>
</object>

So, graceful failure is built-in and you don't need to use script at all.

jeffamaphone