4

明示的に実行を許可するまで、GoogleChromeブロックJavaプラグイン。https://www.google.com/support/chrome/bin/answer.py?answer=1247383&hl=en-US

ChromeがJavaScriptをブロックしているかどうかをJavaScriptで検出するにはどうすればよいですか?

4

2 に答える 2

1

Chromeだけでなく、クリックして再生する機能を採用しています-Firefox(Javaはブロックリストを介してクリックして再生します)、Opera(ターボモードはすべてのプラグインをクリックして再生します)...そしてアドオンもあります/プラグインが自動的に実行されないようにする拡張機能。

それらのどれも、コンテンツスクリプトからプラグインがクリックして再生されていることを知ることはできません。したがって、理想的には、より一般的な方法で問題に対処します。

navigator.pluginsプラグインがインストールされていない場合(を参照)と他の場合を区別することができます。

  • 定期的にスクリプト可能性をテストするか
  • プラグインがロードされたときにページスクリプトを呼び出すようにする

...そしてそれに基づいて「ロードに失敗したかブロックされた」と想定します。これについては、MDNにベストプラクティスのページがあります。

その区別は通常十分に良いはずです。たとえば、SoundCloudがクリックして再生するプラグインをどのように処理するかを確認してください。

于 2013-04-08T08:28:53.230 に答える
-1

情報の正確性を向上させるために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戻るtruefalse、見つかった場合。

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');
于 2011-12-20T09:32:40.917 に答える