/
674.txt
248 lines (187 loc) · 14.2 KB
/
674.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
[15] [DFN[[RUBYB[プラグイン]@en[plugin]]]]は、[[利用者エージェント]]が定義するところの[[利用者エージェント]]が利用する[RUBYB[内容取り扱い器]@en[content handler]]であって、
[[利用者エージェント]]の [CODE(DOMi)@en[[[Document]]]] の[[レンダリング]]の一部となることができるものであり、
しかし [CODE(DOMi)@en[[[Document]]]] の[[子供閲覧文脈]]でも [CODE(DOMi)@en[[[Node]]]]
[[オブジェクト]]を作るものでもないようなものをいいます [SRC[>>11]]。
[16] 通常は[RUBYB[[[第三者]]]@en[third party]]に提供されるものですが、
[[利用者エージェント]]に組み込まれたものもあります [SRC[>>11]]。
[EG[
[17] 例えば現在の多くの [[Webブラウザー]]は、組み込みの [[PDF]]
[[プラグイン]]を持っています。
]EG]
;; [18] [[Webブラウザー]]から別途起動されるものは[[ヘルパーアプリケーション]]と呼ばれ、
[[プラグイン]]とは異なります。
* 仕様書
[REFS[
- [11] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-03-05 09:33:40 +09:00]] 版) <https://html.spec.whatwg.org/#plugin>
]REFS]
* 文脈
[10] [[プラグイン]]は、次の場面で使われることがあります。
[FIG(short list)[
- [CODE(HTMLe)@en[[[embed]]]]
- [CODE(HTMLe)@en[[[object]]]]
- [CODE(HTMLe)@en[[[applet]]]]
- [[プラグイン文書]]
]FIG]
* API
[19] [[HTML Standard]] では[[Webブラウザー]]と[[プラグイン]]の間の [[API]]
は規定せず、[[利用者エージェント]]と[[プラットフォーム]]に依存するもの [SRC[>>11]]
としています。
;; [20] [[プラグイン]]に対応しないことも認められています [SRC[>>11]]。
[12] 各 [[Webブラウザー]]は[[プラグイン]]と[[Webブラウザー]]との間の [[API]]
を用意しています。
[FIG(short list)[
- [[NPAPI]]
- [[PPAPI]]
- [[ActiveX control]]
- [[Qt based plugins]]
- [[NaCl]]
]FIG]
[44] [[IE]] は [[ActiveX control]] に対応しています。 [[Gecko]] は [[NPAPI]]
に対応しています。 [[Blink]] は [[PPAPI]] に対応しています。
[[WebKit]] は [[NPAPI]] に対応しています。
[13] [[プラグイン]]は、 [[DOM]] 上の [CODE(HTMLe)@en[[[embed]]]] [[要素]]や
[CODE(HTMLe)@en[[[object]]]] [[要素]]を通じて[[スクリプト]]に [[API]]
を提供できます。
;; [14] かつては [[Javaアプレット]]と[[スクリプト]]を相互接続する [[LiveConnect]]
も使われていました。
[21] [[著者]]の[[スクリプト]]はそのような [[API]] の有無を通じて当該[[要素]]を処理する[[プラグイン]]が有効か否かを判断できます。
また [CODE(DOMi)@en[[[Navigator]]]] [[オブジェクト]]にも当該環境で有効な[[プラグイン]]の情報を提供する
[[API]] があります。
;; [CODE(JS)@en[[[navigator.plugins]]]]、[CODE(JS)@en[[[navigator.mimeTypes]]]]
参照。
[30] [CODE(HTMLe)@en[[[object]]]] [[要素]]の[[プラグイン]]は、[[フォームデータ集合]]に値を提供できます。
* 性質
[22] [[プラグイン]]は、いくつかの [[MIME型]]について、それを処理できるものとして登録できます。
ただし、[[利用者エージェント]]は [CODE(MIME)@en[[[text/plain]]]] と
[CODE(MIME)@en[[[application/octet-stream]]]] について[[プラグイン]]が登録されたものとして扱っては[['''なりません''']] [SRC[>>11]]。
また仕様上明示的に禁止はされていませんが、 [CODE(MIME)@en[[[text/html]]]]
や [CODE(MIME)@en[[[application/xml]]]] のような [[DOM]]
を構築する [[MIME型]]も[[プラグイン]]での処理には不適切と思われます。
[23] [[プラグイン]]は、 [CODE(DOMa)@en[[[sandbox]]]] [[属性]]の指示に従うなら、
[DFN[[RUBYB[保安である]@en[secured]]]]といいます [SRC[>>11]]。
[EG[
[24] 例えば[[ポップアップ]]するか否かを [CODE(HTMLa)@en[[[sandbox]]]] [[属性]]の指定に従って判断するなら、
[[保安プラグイン]]です [SRC[>>11]]。
]EG]
* プラグインの一覧
[32] 現在の多くの[[Webブラウザー]]は、 [[PDF]] [[プラグイン]]を組み込みで実装しているようです。
[33] 現在の多くの[[デスクトップブラウザー]]は、 [[Flash]] [[プラグイン]]がインストールされた状態になっています。
;; [47] それも徐々に使われなくなっています。また[[スマートフォン]]の[[Webブラウザー]]にはインストールされていないのが普通です。
[34] かつては多くの[[Webブラウザー]]で次の[[プラグイン]]がインストールされた状態でしたが、
現在はあまり使われなくなっています。
[FIG(short list)[
- [[Java]]
- [[Shockwave Director]]
- [[RealPlayer]]
- [[VRML]]
- [[QuickTime]]
- [[Windows Media Player]]
]FIG]
;; [46] [[Java]] や [[Director]] は [[Flash]] に移行しました。
[[VRML]] は使われなくなりました。
[[RealPlayer]] や [[QuickTime]] や [[WMP]] を使った[[動画像]]は
[[Flash]] に移行しました。
;; [45] かつて[[プラグイン]]が必要だったものは、現在ではほぼすべて [[JavaScript]]
で実現できます。
[31] [[NPAPI]] 等各種 [[API]] を使って実装された[[プラグイン]]の一覧は、
各 [[API]] の項を参照してください。
[35] >>9 には [[Chrome]] が使っている[[プラグイン]]の一覧があります。
[40] [[Firefox]] は登録された[[プラグイン]]以外は標準状態で有効にしない方針を採っています
[SRC[>>36, >>37, >>39]]。
[REFS[
- [9] ([TIME[2011-08-08 20:21:00 +09:00]] 版) <https://dl.google.com/chrome/plugins/plugins.xml>
- [37] [CITE@en[Plugins/Firefox Whitelist - MozillaWiki]]
([TIME[2015-05-01 18:19:54 +09:00]] 版)
<https://wiki.mozilla.org/Plugins/Firefox_Whitelist>
-- [39] [CITE[Firefox Whitelist - Automatic Activation of NPAPI Plugins - Google Sheets]]
([TIME[2015-05-01 23:21:14 +09:00]] 版)
<https://docs.google.com/a/mozilla.com/spreadsheets/d/19JIQiaS9mJgkKQ07ax2KH7syRCgxt2dCCxcBD56PiQc/edit?pli=1#gid=0>
]REFS]
* 相互運用性
[28] [[プラグイン]]は [[Web]] の表現力を向上させるための[[拡張点]]として導入され、
90年代には活発に利用されていましたが、一方で[[相互運用性]]を低下させる問題ある機能でもありました。
00年代の [[JavaScript]] [[API]] の発展と [[HTML5]] による [[HTML]]
自体の機能追加によりかつて[[プラグイン]]を通じて提供していた機能のほとんどは
[[Webブラウザー]]自体によって提供されるようになり、[[プラグイン]]は役目を終えつつあります。
[29] ほとんどの [[Webブラウザー]]が対応している [[PDF]] を除き、[[著者]]は[[プラグイン]]に依存するべきではありません。
[[後方互換性]]のため [[Flash]] が利用できる環境も少なくありませんが、対応していない環境もあり、
[[著者]]は [[Flash]] を可能な限り避けるべきです。それ以外の[[プラグイン]]を使うのは、
不適切です。
* セキュリティーとプライバシー
[25] [[Webブラウザー]]は、[[プラグイン]]を使って外部の[[内容]]を処理する時には非常な注意を払う必要があります。特に[[第三者]]の[[プラグイン]]ソフトウェアが[[Webブラウザー]]と同じ[[特権]]で動作する場合には、
[[第三者]]の[[ソフトウェア]]の[[脆弱性]]が [[Webブラウザー]]にも波及します。 [SRC[>>11]]
;; [26] 実際に[[プラグイン]]の[[バッファーオーバーフロー]]その他の[[脆弱性]]が
[[Webブラウザー]]の安全性に深刻な影響を及ぼしたり、[[Web]] の[[同一起源ポリシー]]等の[[セキュリティー]]上の制約が[[プラグイン]]で遵守されず
[[Webアプリケーション]]の安全性に問題が生じたりしたことがあります。[[プラグイン]]の動作が不安定で異常終了するようなことがあれば、
[[Webブラウザー]]自体も巻き込まれてしまいます。最近の [[Webブラウザー]]は[[プラグイン]]を別の[[プロセス]]で動作させたり、
[[第三者]]が提供する[[プラグイン]]を排除したりしてこうした問題の除去に取り組んでいます。
[27] どの[[プラグイン]]が利用できるか (その環境に[[インストール]]されているか)
は歴史的に[[利用者]]によって異なっていましたから、これは [[finterprinting vector]] [SRC[>>11]]
とされています。[[利用者エージェント]]はどの[[利用者]]に対しても同じ[[プラグイン]]の組み合わせのみに対応することが[RUBYB[望ましい]@en[encouraged]] [SRC[>>11]] です。
[54] [[プラグイン]]自体や[[プラグイン]]により実行可能データが処理される場合には、
その安全性にも配慮が必要です。
[EG[
[55] 例えば [[IE]] は [CODE(HTMLe)@en[[[object]]]] [[要素]]で指定された
[[ActiveX control]] を表示できますが、インストールされていなければ [[CAB]]
ファイルをダウンロードして半自動でインストールできます。この時、
[[セキュリティーゾーン]]の設定にもよりますが、
[[証明書]]を表示して[[利用者]]の確認を求めるなどの手順があります。
]EG]
* 歴史
[48] [[プラグイン]]と [[NPAPI]] や [CODE(HTMLe)@en[[[embed]]]] [[要素]]は、
[[Netscape Navigator 2]] により導入されました。 [[Java applet]] と
[CODE(HTMLe)@en[[[applet]]]] [[要素]]も実装されました。
;; [50] [CODE(HTMLe)@en[[[applet]]]] [[要素]]は [[HotJava]] が実装していましたが、
それより前には [CODE(HTMLe)@en[[[app]]]] [[要素]]でした。
[49] [[Internet Explorer 3]] もこれらを実装しました。更に [[ActiveX control]]
や [CODE(HTMLe)@en[[[object]]]] [[要素]]も実装しました。
;; [51] しかし [[IE]] はその後政治的理由で [[NPAPI]] や [[Java]] への対応を取りやめることになります。
[52] 90年代には沢山の[[プラグイン]]が作られ、多くの [[Webサイト]]で多くの
[CODE(HTMLe)@en[[[embed]]]] [[要素]]や [CODE(HTMLe)@en[[[object]]]] [[要素]]、
[CODE(HTMLe)@en[[[applet]]]] [[要素]]が使われていました。しかし
[[Webブラウザー]]によって異なる[[要素]]の異なる記述を使い分けなければならず、
また[[プラグイン]]が [[Windows]] のみや [[Windows]] と [[Mac OS]]
のみで提供されていることも多く、[[相互運用性]]には多くの問題を抱えていました。
[[プラグイン]]を使ったページのほとんどすべては、
特定の [[Webブラウザー]]と特定の[[プラグイン]]の特定の版が導入されていないと動作しない不便なページとなっていました。
[53] [[IETF]] と [[W3C]] は、 [[SGML]] として不適切という理由で
[CODE(HTMLe)@en[[[embed]]]] [[要素]]の標準化を拒み、
特定の技術に依存しているという理由で [CODE(HTMLe)@en[[[applet]]]]
[[要素]]を[[非推奨]]にすることで、 [CODE(HTMLe)@en[[[object]]]]
[[要素]]への統一を企てました。しかし[[プラグイン]]技術そのものを統一する動きにはなりませんでしたし、
この時代の [CODE(HTMLe)@en[[[object]]]] [[要素]]は実質的に [[ActiveX control]] 専用でしたから、
[CODE(HTMLe)@en[[[embed]]]] や [CODE(HTMLe)@en[[[applet]]]] が使われなくなることはありませんでした。
[1]
[CITE[Inline Plug-ins]] ([CODE[2007-02-28 00:41:17 +09:00]] 版) <http://web.archive.org/web/19970605061848/www82.netscape.com/comprod/products/navigator/version_2.0/plugins/index.html>
([[名無しさん]])
[2]
[CITE@en[Gecko Plugin API Reference - MDC]] ([CODE[2007-03-01 05:12:27 +09:00]] 版) <http://developer.mozilla.org/en/docs/Gecko_Plugin_API_Reference>
([[名無しさん]])
[3]
[CITE[Web Kit Plug-In Programming Topics: Creating Plug-ins with Cocoa and the Web Kit]] ([CODE[2007-03-09 08:50:03 +09:00]] 版) <http://developer.apple.com/documentation/InternetWeb/Conceptual/WebKit_PluginProgTopic/Tasks/WebKitPlugins.html>
([[名無しさん]])
[4]
[CITE[プラグインを開発する環境を整える - shima111の日記]] ([TIME[2009-01-21 07:53:23 +09:00]] 版) <http://d.hatena.ne.jp/shima111/20080523/p1>
[5] [CITE[Bug 8784 – politics in <param> example]]
([TIME[2010-02-18 23:48:26 +09:00]] 版)
<http://www.w3.org/Bugs/Public/show_bug.cgi?id=8784>
[6] [CITE@en[Web Applications 1.0 r6573 Define how sandboxing works with plugins in a hypothetical world where plugins honour the sandbox.]]
( ([TIME[2011-09-24 04:40:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6572&to=6573>
[7] [CITE['''['''whatwg''']''' instantiating display:none plugins]]
([TIME[2011-11-02 08:43:09 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-November/033732.html>
[8] [CITE['''['''whatwg''']''' instantiating display:none plugins]]
([TIME[2012-06-14 09:13:58 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-June/036394.html>
[REFS[
- [36] [CITE@en-US[Update on Plugin Activation | Mozilla Security Blog]]
([TIME[2015-05-01 23:19:52 +09:00]] 版)
<https://blog.mozilla.org/security/2014/02/28/update-on-plugin-activation/>
- [41] [CITE@en[992995 – Implement plugin whitelist]] ([TIME[2015-05-01 23:26:21 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=992995>
- [42] [CITE@en[1007389 – Implement plugin whitelist, round 2]] ([TIME[2015-05-01 23:26:47 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=1007389>
- [43] [CITE@en-US[Site Compatibility for Firefox 30 - Mozilla | MDN]] ([TIME[2014-06-19 19:16:24 +09:00]] 版) <https://developer.mozilla.org/en-US/Firefox/Releases/30/Site_Compatibility#Plugin_whitelist_has_been_implemented>
]REFS]
[38] [CITE@en[Keep your Firefox healthy with a quick checkup — Mozilla]]
([TIME[2015-05-01 23:21:08 +09:00]] 版)
<https://www.mozilla.org/en-US/plugincheck/>