PluginArray

navigator.plugins (DOM)

[5] navigator オブジェクトplugins IDL属性は、 文書PluginArray オブジェクトを返します。

仕様書

navigator.plugins

[6] NavigatorPlugins インターフェイスplugins IDL属性は、 PluginArray オブジェクトを返さなければなりません >>4

[7] このIDL属性読み取り専用で、毎回同じオブジェクトを返さなければなりません >>4

[8] 大域オブジェクトごとに固有のオブジェクトが存在します。 document.open により新しいものに差し替えられますが、 それ以外は常に同じです。

PluginArray オブジェクト

[11] PluginArray オブジェクトは、 利用者エージェントが対応するプラグインの一部または全部を表します。 これは fingerprinting vector ですから、どのプラグインも含めないのが良いと考えられます。 一方で、プラグインが存在するか検査するスクリプトも存在しているので、 まったく含めないのは好ましくないかもしれません。 >>4

プラグインも参照。
[20] IE は、常に空にするようです。

[9] PluginArray インターフェイスは、 文書環境晒されインターフェイスオブジェクトも存在します >>4

[10] 次のメンバーを持ちます。

[13] supported property indices は、0 から隠れプラグイン以外のプラグインの数までです >>4。 (とされていますが、数 - 1 までと思われます。)

[14] length 属性は、隠れプラグイン以外のプラグインの数を返さなければなりません >>4

[15] item メソッドは、 indexed getter です。 引数として unsigned long を1つ受け取ります。 これが supported property indices のいずれかならプラグインを、 そうでなければ null を返さなければなりません>>4

[16] 返すプラグインは、隠れプラグイン以外のものを name 属性値整列し、引数で示された索引の位置にあるものとしなければなりません >>4

[17] 順序は、プラグインインストール順などその他の情報を漏洩するものであってはいけません。 >>4

[18] supported property names は、 PluginArray に含まれるプラグインname 属性値です >>4supported property names により PluginArray晒される特性は、列挙不能でなければなりません >>4

[19] namedItem メソッドは、 named getter です。 引数として DOMString を1つ受け取ります。 これが supported property names のいずれかならそれが name 属性と等しいプラグインを、 そうでなければ null を返さなければなりません>>4

[12] live であってはなりません >>4

refresh メソッドがあります。

歴史

[21] JavaScript 1.1 で追加されました。

[1] このプログラムを作ったのは誰だあっ!! - Oui, ça va bien. ( 版) <http://d.hatena.ne.jp/madauca/20081116/1226863458>

で、おかしいなと思ってlocal_storage.jsを見たら、navigator.plugins["Shockwave Flash"].description.charAt(16);が原因のようです。

要するに、navigator.plugins["Shockwave Flash"].descriptionで返って来る「Shockwave Flash 10.0 r12」から、charAt(16)で17文字目だけを抜き出してヴァージョンを判定しようとするから、ヴァージョンが1だと誤認されてしまうと言うこと。何でヴァージョンが1桁なのを前提にするかな…

[2] Flash 10でもFlash 9を名乗る - 素人がプログラミングを勉強するブログ ( 版) <http://d.hatena.ne.jp/javascripter/20090106/1231245965>

[3] Web Applications 1.0 r8036 navigator.plugins and company ( ( 版)) <http://html5.org/tools/web-apps-tracker?from=8035&to=8036>

[22] Intent to implement: HTML5 by Default - Google グループ ( ()) <https://groups.google.com/a/chromium.org/d/msg/chromium-dev/0wWoRRhTA_E/__E3jf40OAAJ>

Navigator.Plugins() and Navigator.MimeTypes() will only report the presence of Flash Player if the user has indicated that the domain should execute Flash, or if the site is in one of the Top 10 domains using Flash.

[23] Implement stub for NavigatorPlugins · Issue #9991 · servo/servo ( ()) <https://github.com/servo/servo/issues/9991>

[24] Next Steps for Legacy Plug-ins | WebKit ( ()) <https://webkit.org/blog/6589/next-steps-for-legacy-plug-ins/>

By default, Safari no longer tells websites that common plug-ins are installed. It does this by not including information about Flash, Java, Silverlight, and QuickTime in navigator.plugins and navigator.mimeTypes. This convinces websites with both plug-in and HTML5-based media implementations to use their HTML5 implementation.