/
674.txt
141 lines (103 loc) · 8.15 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
[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]]
]FIG]
[13] [[プラグイン]]は、 [[DOM]] 上の [CODE(HTMLe)@en[[[embed]]]] [[要素]]や
[CODE(HTMLe)@en[[[object]]]] [[要素]]を通じて[[スクリプト]]に [[API]]
を提供できます。
;; [14] かつては [[Javaアプレット]]と[[スクリプト]]を相互接続する [[LiveConnect]]
も使われていました。
[21] [[著者]]の[[スクリプト]]はそのような [[API]] の有無を通じて当該[[要素]]を処理する[[プラグイン]]が有効か否かを判断できます。
また [CODE(DOMi)@en[[[Navigator]]]] [[オブジェクト]]にも当該環境で有効な[[プラグイン]]の情報を提供する
[[API]] があります。
[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]
* 相互運用性
[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]] です。
* 歴史
[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>
[9] ([TIME[2011-08-08 20:21:00 +09:00]] 版) <https://dl.google.com/chrome/plugins/plugins.xml>