Определить, блокирует ли Google Chrome Java-плагин - PullRequest
4 голосов
/ 02 декабря 2011

Google Chrome блокирует плагин Java, пока вы явно не разрешите его запуск. https://www.google.com/support/chrome/bin/answer.py?answer=1247383&hl=en-US

Как я могу определить в javascript, если Chrome блокирует его?

Ответы [ 2 ]

1 голос
/ 08 апреля 2013

Это не только Chrome, использующий функции "нажми и работай" - Firefox (Java сделал нажми и играй через блок-лист), Opera (их режим Turbo делает все плагины нажми и играй), ... и есть такжеДополнения / Расширения, которые препятствуют автоматическому запуску плагинов.

Ни один из них не позволяет вам узнать, какие плагины воспроизводятся по клику из скриптов контента.Таким образом, в идеале вы решаете проблему в более общем виде.

Вы можете различить не установленный плагин (см. navigator.plugins) и другие случаи, либо

  • , регулярно проверяя еговозможность создания сценариев или
  • с вызовом плагина в скрипте страниц при загрузке

... и предположим, что "не удалось загрузить или заблокировали" на основетот.Для этого на MDN есть страница с рекомендациями .

Это различие должно быть достаточно хорошим, проверьте, например, как SoundCloud обрабатывает плагины, воспроизводимые по клику.

0 голосов
/ 20 декабря 2011

Ответ отредактирован 2013.03.15 для повышения точности информации

Список поддерживаемых плагинов доступен в виде массива в объекте navigator:

navigator.plugins

Этот API нестандартный , но все современные браузеры реализуют его. Поддержка Internet Explorer восходит по крайней мере к IE7, но она недоступна в старых версиях Opera.

navigator.plugins имеет следующую базовую структуру:

PluginArray [
    ...
    Plugin {
        description: "Java Plug-In 2 for NPAPI Browsers"
        filename: "JavaAppletPlugin.plugin"
        length: 17
        name: "Java Plug-In 2 for NPAPI Browsers"
    },
    ...
]

Вот функция, которая перебирает navigator.plugins и проверяет свойство name для заданной строки. Возвращает true или false, если найдено.

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;
}

Используйте это так (без учета регистра):

pluginEnabled('java');
pluginEnabled('flash');
...