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?

È stato utile?

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');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top