Rileva se Google Chrome blocca il plug-in Java
-
27-10-2019 - |
Domanda
Il plug-in Java di Google Chrome blocca finché non ne consenti esplicitamente l'esecuzione. https://www.google.com/support/chrome/bin/answer.py?answer=1247383&hl=en-USA
Come posso rilevare in JavaScript se Chrome lo blocca?
Soluzione
Non è solo Chrome che utilizza funzionalità click-to-play: Firefox (Java ha creato il click-to-play tramite blocklist), Opera (la loro modalità Turbo rende tutti i plugin click-to-play), ...e ci sono anche componenti aggiuntivi/estensioni che impediscono l'esecuzione automatica dei plugin.
Nessuno di questi ti consente di scoprire se i plugin sono click-to-play da script di contenuto.Quindi idealmente affronti il problema in modo più generale.
È possibile distinguere tra il plugin non installato (vedi navigator.plugins
) e altri casi da entrambi
- testare regolarmente la sua scriptabilità o
- facendo in modo che il plugin chiami nello script delle pagine quando viene caricato
...e assumere "impossibile caricare o è stato bloccato" basato su quello.C'è un pagina delle migliori pratiche su MDN per questo.
Questa distinzione di solito dovrebbe essere abbastanza buona, controlla ad es.come SoundCloud gestisce i plugin click-to-play.
Altri suggerimenti
Risposta modificata il 15 marzo 2013 per migliorare l'accuratezza delle informazioni
Un elenco di plugin supportati è disponibile come array nell'oggetto navigator
:
navigator.plugins
Questa API è non standard , ma tutti i browser moderni lo implementano.Il supporto di Internet Explorer risale almeno a IE7, ma non è disponibile nelle vecchie versioni di Opera.
navigator.plugins
ha questa struttura di base:
PluginArray [
...
Plugin {
description: "Java Plug-In 2 for NPAPI Browsers"
filename: "JavaAppletPlugin.plugin"
length: 17
name: "Java Plug-In 2 for NPAPI Browsers"
},
...
]
Ecco una funzione che esegue il ciclo su navigator.plugins
e controlla la proprietà name
per una determinata stringa.Restituisce true
o false
se trovato.
function pluginEnabled(name) {
var plugins = navigator.plugins,
i = plugins.length,
regExp = new RegExp(name, 'i');
while (i--) {
if (regExp.test(plugins[i].name)) return true;
}
return false;
}
Usalo in questo modo (senza distinzione tra maiuscole e minuscole):
pluginEnabled('java');
pluginEnabled('flash');