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.
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.
Share Improve this question asked May 27, 2009 at 17:57 Tom HubbardTom Hubbard 16.1k14 gold badges61 silver badges87 bronze badges4 Answers
Reset to default 10Just try
it.
try {
var plugin = new ActiveXObject('SomeActiveX');
} catch (e) {
alert("Error"); // Or some other error code
}
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.
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');
For Internet Explorer 11 you can use navigator.plugins JS API, but you need to add apropriate registrey keys in order for IE11 to detect it:
HKLM\SOFTWARE\Microsoft\Internet Explorer\NavigatorPluginsList
or for 64bit
HKLM\SOFTWARE\Wow6432\Microsoft\Internet Explorer\NavigatorPluginsList
e.g. for plugin with Name "ABC" and mime type "application/abc" :
- add key HKLM\SOFTWARE\Wow6432\Microsoft\Internet Explorer\NavigatorPluginsList\ABC
- create subkey for each custom MIME type supported by the plugin, using the MIME type value as the name of the subkey e.g. "application/abc"
Then checking for the plugin existence is done using this code:
var plugin = navigator.plugins["<your plugin activex id>"];
if(plugin) {
//plugin detected
} else {
//plugin not found
}
More on this here: http://msdn.microsoft.com/en-us/library/ie/dn423948(v=vs.85).aspx