[5] [[WebIDL]] における [DFN[[CODE(IDL)@en[[[legacycaller]]]]]] は、オブジェクトを [CODE(DOMi)@en[[[Function]]]]
として実行したときに呼び出される[[メソッド]]です。

[6] [[コレクション]]を[[メソッド]]として呼び出すのはおそらく [[Microsoft]] によって [[IE4 DOM]] の一部として導入された機能で、
[[Visual Basic]] などにも同様の構文が存在しています。 [[Web]] ではあまり使われておらず、
互換性のために必要な場合に限って利用し、新機能には使わないことになっています。 (そのため
「legacy」と呼ばれています。)

* 仕様書

[REFS[
- [13] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#dom-embed-caller>
- [16] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#dom-object-caller>
]REFS]

* [CODE(IDL)@en[legacycaller]] の一覧

[8] 現存する [CODE(IDL)@en[[[legacycaller]]]] は次の[[インターフェイス]]のものです。
[FIG(list)[
- [CODE(DOMi)@en[[[HTMLAllCollection]]]]
]FIG]

[30] 唯一 [CODE[document.all]] のみとなったため、 [[Web IDL]] の機能としては廃止され、
[CITE[HTML Standard]] で [CODE[document.all]] 専用の機能として定義される形になりました。

[HISTORY[
[9] 次の[[インターフェイス]]には一時 [CODE(IDL)@en[[[legacycaller]]]] がありましたが、既に削除されています。
[FIG(list middle)[
- [CODE(DOMi)@en[[[HTMLPropertiesCollection]]]]
- [CODE(DOMi)@en[[[HTMLFormElement]]]]
- [CODE(DOMi)@en[[[HTMLFormControlsCollection]]]]
- [CODE(DOMi)@en[[[HTMLOptionsCollection]]]]
- [CODE(DOMi)@en[[[HTMLEmbedElement]]]]
- [CODE(DOMi)@en[[[HTMLObjectElement]]]]
]FIG]
]HISTORY]

* 歴史

[1] [CITE@en[Web Applications 1.0 r6781     compat with majority of browsers]]
( ([TIME[2011-10-29 08:05:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6780&to=6781>

[2] [CITE@en[Web Applications 1.0 r7268     Remove some 'legacycaller's]]
( ([TIME[2012-08-25 04:31:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7267&to=7268>

[3] [CITE@en[Web Applications 1.0 r8469     Remove some parts of document.all that data shows have virtually no usage.]]
( ([TIME[2014-02-07 04:35:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8468&to=8469>

[4] [CITE@en[Web Applications 1.0 r8502     Restore document.all() legacycaller, for compat]]
( ([TIME[2014-02-22 07:12:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8501&to=8502>

[7] [[DOM Perl Binding]] では [CODE(perl)@en[[[use overload]]]] の [CODE(perl)[[[&{}]]]]
[[演算子]]に対応することにされていましたが、後に削除されました。 ([[Perl]] では互換性のために必要がないため。)


[10] [CITE@en[909656 – Can we remove the legacycaller on <object>/<embed>?]]
([TIME[2015-01-30 17:46:30 +09:00]] 版)
<https://bugzilla.mozilla.org/show_bug.cgi?id=909656>

[11] [CITE[Intent to Remove: HTMLAppletElementLegacyCall - Google グループ]]
([TIME[2015-01-30 17:47:14 +09:00]] 版)
<https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/MuxvaXiyBxU>

[12] [CITE@en[Web Applications 1.0 r6915  Define the legacycaller behaviour of <embed> and <object>.]]
([TIME[2012-01-26 07:49:00 +09:00]] 版)
<https://html5.org/r/6915>

[22] [CITE@en[Remove legacycaller from two collections · whatwg/html@834a858]] ([TIME[2015-09-30 22:54:41 +09:00]] 版) <https://github.com/whatwg/html/commit/834a8589d2df1977ee8cb1e8b277fa87d5a69a0b>

** プラグインの legacycaller

[14] [CODE(DOMi)@en[[[HTMLEmbedElement]]]] [[インターフェイス]]は、
[[legacycaller]] 操作を実装しなければ[['''なりません''']] [SRC[>>13]]。

[15] その既定の動作は、 [CODE(DOMi)@en[[[NotSupportedError]]]] [[例外]]を[[投げる]]ものとすることが[RUBYB[提案]@en[suggest]]されています [SRC[>>13]]。

[17] [CODE(HTMLe)@en[[[object]]]] [[要素]]の [[legacycaller]] 操作は、
次のようにしなければ[['''なりません''']] [SRC[>>16]]。
[FIG(steps)[
= [18] [[実現値化]]された[[プラグイン]]を持つ場合で、
そのスクリプト可能インターフェイスに [[legacycaller]] 操作が定義されているなら、
== [19] それを呼び出します。
= [20] それ以外の場合、
== [21] [CODE(DOMe)@en[[[NotSupportedError]]]] [[例外]]を[[投げます]]。
]FIG]

[23] [CITE@en[Remove legacycaller from <object> and <embed>]]
([[zcorpan]]著, [TIME[2016-10-26 21:40:28 +09:00]])
<https://github.com/whatwg/html/commit/aaf2435a8cbaf7fa4e791bf86874854bb1b618af>

**

[24] [CITE@en[Add legacy platform objects. (#230)]]
([[tobie]]著, [TIME[2016-11-15 02:07:16 +09:00]])
<https://github.com/heycam/webidl/commit/379685767dce3f953e187a2a8f3cb492b9b56649>

[25] [CITE@en[API Deprecations and Removals in Chrome 57  |  Web  |  Google Developers]]
([TIME[2017-02-23 00:20:53 +09:00]])
<https://developers.google.com/web/updates/2017/02/chrome-57-deprecations?utm_source=feed&utm_medium=>

[26] [CITE@en[Deprecations and Removals in Chrome 58  |  Web  |  Google Developers]]
( ([TIME[2017-03-28 01:25:28 +09:00]]))
<https://developers.google.com/web/updates/2017/03/chrome-58-deprecations>

[27] [CITE@en[Editorial: switch HTMLAllCollection legacycaller to custom '''[''''''['''Call''']'''''']''']]
([[tobie]]著, [TIME[2017-09-09 06:21:15 +09:00]])
<https://github.com/whatwg/html/commit/0679448c59cb4cd69019be1e1f35fee1bcbc9c66>

[28] [CITE@en[Add HTMLAllCollection '''[''''''['''Call''']'''''']''', remove legacycaller special operation by tobie · Pull Request #2932 · whatwg/html]]
([TIME[2017-09-09 17:37:28 +09:00]])
<https://github.com/whatwg/html/pull/2932>

[29] [CITE@en[Remove legacy callers]]
([[TimothyGu]]著, [TIME[2017-08-16 23:39:26 +09:00]])
<https://github.com/heycam/webidl/commit/2b1a990df64deb0b3d3d91ebd83f8efe59e2809b>

[31] [CITE@en['''[''''''['''Construct''']'''''']''' for legacy platform objects? · Issue #407 · heycam/webidl]]
([TIME[2017-09-13 16:01:49 +09:00]])
<https://github.com/heycam/webidl/issues/407>

[32] [CITE@en['''[''''''['''Call''']'''''']''' for objects w/o legacycaller · Issue #408 · heycam/webidl]]
([TIME[2017-09-13 16:02:51 +09:00]])
<https://github.com/heycam/webidl/issues/408>

[33] [CITE@en[Remove legacy callers by TimothyGu · Pull Request #412 · heycam/webidl]]
([TIME[2017-09-13 16:03:38 +09:00]])
<https://github.com/heycam/webidl/pull/412>