问题
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.
回答1:
Just try it.
try {
var plugin = new ActiveXObject('SomeActiveX');
} catch (e) {
alert("Error"); // Or some other error code
}
回答2:
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.
回答3:
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');
回答4:
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
来源:https://stackoverflow.com/questions/917148/javascript-way-to-list-available-plugins-for-ie