2009-05-27 7 views
8

Existe-t-il un moyen rapide d'obtenir une liste en JavaScript des plugins Active X disponibles?Javascript permet de lister les plugins disponibles pour IE

Je dois faire un test pour voir si un plugin a été installé avant de l'essayer.

En effet, je veux créer une page qui dit «Plugin installé et fonctionne correctement» ou l'avoir échouer gracieusement.

Je ne sais pas comment le faire échouer gracieusement si le plugin n'est pas disponible.

Répondre

10

Juste try il.

try { 
    var plugin = new ActiveXObject('SomeActiveX'); 
} catch (e) { 
    alert("Error"); // Or some other error code 
} 
+0

Merci. Je préférerais pouvoir voir si elle existe sans réellement avoir à instancier. Mais on dirait que c'est le seul moyen. –

+2

Correct. Dans IE, il n'y a aucun moyen de vérifier une existence d'addons sans essayer de l'utiliser. – EricLaw

0

Peut-être que ce script peut aider

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 

appel à l'aide de ceci pour exemple

pluginFound = detectPlugin('Shockwave','Flash'); 
+0

Est-ce que cela fonctionne dans IE8? Je jouais avec l'objet navigateur plus tôt et la longueur des plugins était nulle. –

+0

Il semble fonctionner parce que cette page http://www.unibanco.com.br/vste/_exc/_hom/index.asp utilise le script sans problème. –

+3

Il s'avère que le tableau de plugins n'est pas rempli dans Internet Explorer. –

2

La balise object affichera tout ce qui est à l'intérieur si l'objet ne peut pas être instancié:

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

Donc, l'échec gracieux est intégré et vous n'avez pas besoin d'utiliser de script du tout.

0

Pour Internet Explorer 11, vous pouvez utiliser navigator.plugins API JS, mais vous devez ajouter des clés apropriate de registrey afin IE11 de le détecter:

HKLM\SOFTWARE\Microsoft\Internet Explorer\NavigatorPluginsList 

ou pour 64bit

HKLM\SOFTWARE\Wow6432\Microsoft\Internet Explorer\NavigatorPluginsList 

par exemple pour le plugin avec le nom "ABC" et le type MIME "application/abc":

  • ajouter la clé HKLM \ SOFTWARE \ Wow6432 \ Microsoft \ Internet Explorer \ NavigatorPluginsList \ ABC
  • créer sous-clé pour chaque MIME personnalisé type pris en charge par le plugin, en utilisant la valeur de type MIME comme le nom de la sous-clé par exemple "Application/abc"

vérifier ensuite l'existence de plug-in est fait en utilisant ce code:

var plugin = navigator.plugins["<your plugin activex id>"]; 
if(plugin) { 
    //plugin detected 
} else { 
    //plugin not found 
} 

Plus sur cette ici: http://msdn.microsoft.com/en-us/library/ie/dn423948(v=vs.85).aspx

Questions connexes