[5] [CODE(DOMa)@en[[[navigator]]]] [[オブジェクト]]の
[DFN[[CODE(DOMa)@en[[[plugins]]]]]] [[IDL属性]]は、
[[文書]]の [DFN[[CODE(DOMi)@en[[[PluginArray]]]]]] [[オブジェクト]]を返します。

* 仕様書

[REFS[
- [4] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#plugins-2>
]REFS]

* [CODE(JS)@en[navigator.plugins]]

[6] [CODE(DOMi)@en[[[NavigatorPlugins]]]] [[インターフェイス]]の
[CODE(DOMa)@en[[[plugins]]]] [[IDL属性]]は、
[CODE(DOMi)@en[[[PluginArray]]]] [[オブジェクト]]を返さなければ[['''なりません''']]
[SRC[>>4]]。

[7] この[[IDL属性]]は[[読み取り専用]]で、毎回同じ[[オブジェクト]]を返さなければ[['''なりません''']] [SRC[>>4]]。

;; [8] [[大域オブジェクト]]ごとに固有の[[オブジェクト]]が存在します。
[CODE(JS)@en[[[document.open]]]] により新しいものに差し替えられますが、
それ以外は常に同じです。

* [CODE(DOMi)@en[PluginArray]] オブジェクト

[11] [CODE(DOMi)@en[[[PluginArray]]]] [[オブジェクト]]は、
[[利用者エージェント]]が対応する[[プラグイン]]の一部または全部を表します。
これは [[fingerprinting vector]] ですから、どの[[プラグイン]]も含めないのが良いと考えられます。
一方で、[[プラグイン]]が存在するか検査する[[スクリプト]]も存在しているので、
まったく含めないのは好ましくないかもしれません。 [SRC[>>4]]

;; [[プラグイン]]も参照。

;; [20] [[IE]] は、常に空にするようです。 [TIME[2015-07-05T02:55:29.500Z]]

[9] [CODE(DOMi)@en[[[PluginArray]]]] [[インターフェイス]]は、
[[文書環境]]に[[晒され]]、[[インターフェイスオブジェクト]]も存在します [SRC[>>4]]。

[10] 次の[[メンバー]]を持ちます。

[FIG(list short)[
- [CODE(DOMm)@en[[[refresh]]]]
- [CODE(DOMa)@en[[[length]]]]
- [CODE(DOMm)@en[[[item]]]]
- [CODE(DOMm)@en[[[namedItem]]]]
- [[indexed getter]]
- [[named getter]]
]FIG]

[13] [[supported property indices]] は、0 から[[隠れプラグイン]]以外の[[プラグイン]]の数までです [SRC[>>4]]。
(とされていますが、数 - 1 までと思われます。)

[14] [CODE(DOMm)@en[[[length]]]] [[属性]]は、[[隠れプラグイン]]以外の[[プラグイン]]の数を返さなければ[['''なりません''']] [SRC[>>4]]。

[15] [CODE(DOMm)@en[[[item]]]] [[メソッド]]は、 [[indexed getter]] です。
[[引数]]として [[unsigned long]] を1つ受け取ります。
これが [[supported property indices]] のいずれかなら[[プラグイン]]を、
そうでなければ [[null]] を返さなければ[['''なりません''']]。 [SRC[>>4]]

[16] 返す[[プラグイン]]は、[[隠れプラグイン]]以外のものを [CODE(DOMa)@en[[[name]]]]
[[属性値]]で[[整列]]し、引数で示された[[索引]]の位置にあるものとしなければ[['''なりません''']]
[SRC[>>4]]。

;; [17] 順序は、[[プラグイン]]の[[インストール]]順などその他の情報を漏洩するものであってはいけません。 [SRC[>>4]]

[18] [[supported property names]] は、 [CODE(DOMi)@en[[[PluginArray]]]]
に含まれる[[プラグイン]]の [CODE(DOMa)@en[[[name]]]] [[属性値]]です [SRC[>>4]]。
[[supported property names]] により [CODE(DOMi)@en[[[PluginArray]]]]
に[[晒される]][[特性]]は、[[列挙不能]]でなければ[['''なりません''']] [SRC[>>4]]。

[19] [CODE(DOMm)@en[[[namedItem]]]] [[メソッド]]は、 [[named getter]] です。
[[引数]]として [CODE(IDL)@en[[[DOMString]]]] を1つ受け取ります。
これが [[supported property names]] のいずれかならそれが [CODE(DOMa)@en[[[name]]]]
[[属性]]と等しい[[プラグイン]]を、
そうでなければ [[null]] を返さなければ[['''なりません''']]。 [SRC[>>4]]

[12] [[live]] であっては[['''なりません''']] [SRC[>>4]]。

;; [CODE(DOMm)@en[[[refresh]]]] [[メソッド]]があります。

* 歴史

[21] [[JavaScript 1.1]] で追加されました。

[25] 
[CITE[Welcome to Netscape Navigator 3.0]], [TIME[2024-08-16T11:53:26.000Z]], [TIME[2002-06-30T20:16:54.879Z]] <https://web.archive.org/web/20020630200918/http://wp.netscape.com/eng/mozilla/3.0/relnotes/windows-3.0.html#JavaScript>


[FIG(quote)[
[FIGCAPTION[
[1] [CITE[このプログラムを作ったのは誰だあっ!! - Oui, ça va bien.]] ([TIME[2009-01-06 11:29:28 +09:00]] 版) <http://d.hatena.ne.jp/madauca/20081116/1226863458>
]FIGCAPTION]

> で、おかしいなと思って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桁なのを前提にするかな…

]FIG]

[2]
[CITE[Flash 10でもFlash 9を名乗る - 素人がプログラミングを勉強するブログ]] ([TIME[2009-02-08 18:15:37 +09:00]] 版) <http://d.hatena.ne.jp/javascripter/20090106/1231245965>


[3] [CITE@en[Web Applications 1.0 r8036     navigator.plugins and company]]
( ([TIME[2013-07-09 10:19:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8035&to=8036>

[FIG(quote)[
[FIGCAPTION[
[22] [CITE[Intent to implement: HTML5 by Default - Google グループ]]
( ([TIME[2016-05-17 12:51:52 +09:00]]))
<https://groups.google.com/a/chromium.org/d/msg/chromium-dev/0wWoRRhTA_E/__E3jf40OAAJ>
]FIGCAPTION]

> 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.

]FIG]


[23] [CITE@en[Implement stub for NavigatorPlugins · Issue #9991 · servo/servo]]
( ([TIME[2016-06-16 12:23:43 +09:00]]))
<https://github.com/servo/servo/issues/9991>

[FIG(quote)[
[FIGCAPTION[
[24] [CITE[Next Steps for Legacy Plug-ins | WebKit]]
( ([TIME[2016-06-16 12:19:58 +09:00]]))
<https://webkit.org/blog/6589/next-steps-for-legacy-plug-ins/>
]FIGCAPTION]

> 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.

]FIG]
