[37] [[Web IDL]] には[[拡張属性]]として [DFN[[CODE(IDL)@en[[[Global]]]]]]、
[DFN[[CODE(IDL)[[[PrimaryGlobal]]]]]] があり、[[インターフェイス]]に指定できます [SRC[>>36]]。

* 仕様書

[REFS[
- [36] [CITE[Web IDL (Second Edition)]] ([TIME[2014-02-10 21:45:38 +09:00]] 版) <http://heycam.github.io/webidl/#Global>
]REFS]

* 文脈

[55] これらの[[拡張属性]]を同時には指定できません [SRC[>>36]]。

[56] [CODE(IDL)@en[[[PrimaryGlobal]]]] [[拡張属性]]を指定できるのは、
いずれか1つの[[インターフェイス]]だけです [SRC[>>36]]。
この[[拡張属性]]が指定されたものを[DFN[[RUBYB[[[一次大域インターフェイス]]]@en[primary global interface]]]]といいます
[SRC[>>36]]。

;; [1] 実用上、これは [CODE(DOMi)@en[[[Window]]]] [[インターフェイス]]のことです。

[45] これらの[[拡張属性]]を[[部分インターフェイス定義]]に指定する場合は、
その[[部分インターフェイス定義]]で[[名前付き特性取得子]]も定義していなければ[['''なりません''']]
[SRC[>>36]]。

;; [48] [CODE(IDL)@en[[[partial]]]] でない [CODE(IDL)@en[[[interface]]]] 
なら、[[名前付き特性]]が定義されていなくても構わないようです。

* 作用と制約

[38] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]は、
[[ECMAScript環境]]で[[大域オブジェクト]]として使うことができます [SRC[>>36]]。

[46] これらの[[拡張属性]]が指定された[[インターフェイス]]は、
同じ [[ECMAScript大域環境]]においてそれを[[実装]]する[[オブジェクト]]を複数持つことができません
[SRC[>>36]]。これは、[[名前付き特性]]が[[プロトタイプ鎖]]中に現れるため、
複数存在するとすべての[[オブジェクト]]が同じ[[名前付き特性]]群を共有してしまうためです
[SRC[>>36]]。

;; [47] 複数の [CODE(DOMi)@en[[[Window]]]] ([CODE(DOMi)@en[[[WindowProxy]]]])
[[オブジェクト]]が同時に存在することがあるように、
同じ[[インターフェイス]]を[[実装]]していながらも異なる[[ECMAScript大域環境]]由来の[[オブジェクト]]なら複数存在することがあります。

[40] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]では、
当該[[インターフェイス]]や[[派生的インターフェイス群]]の[[インターフェイスメンバー]]は、
[[インターフェイスプロトタイプオブジェクト]]ではなく、
[[オブジェクト]]自体に現れます [SRC[>>36]]。

[52] これらの[[拡張属性]]が指定された[[インターフェイス]]については、
当該[[インターフェイス]]と[[派生的インターフェイス群]]にわたって[[インターフェイスメンバー]]の名前が衝突したり、
[[文字列化器]]、[[直列化器]]、[[反復器]]がそれぞれ複数あったりしては[['''なりません''']]
[SRC[>>36]]。

[39] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]では、
[[名前付き特性]]は、その[[オブジェクト]]自体ではなく、[[プロトタイプ鎖]]中にある[[名前付き特性オブジェクト]]に現れます
[SRC[>>36]]。

[41] これらの[[拡張属性]]が指定された[[インターフェイス]]を[[実装]]する[[オブジェクト]]では、
[[名前付き特性]]の[[設定子]]、[[作成子]]、[[削除子]]を定義しては[['''なりません''']]
[SRC[>>36]]。

[42] これらの[[拡張属性]]が指定された[[インターフェイス]]には、
[CODE(IDL)@en[[[OverrideBuiltins]]]] [[拡張属性]]を指定しては[['''なりません''']]
[SRC[>>36]]。また [CODE(IDL)@en[[[OverrideBuiltins]]]] 
[[拡張属性]]が指定された[[インターフェイス]]を[[継承]]しては[['''なりません''']]
[SRC[>>36]]。

;; [43] [CODE(IDL)@en[[[OverrideBuiltins]]]] [[拡張属性]]は[[インターフェイスメンバー]]と[[名前付き特性]]が同じ[[オブジェクト]]に存在していないと使えません。

[44] これらの[[拡張属性]]が指定された[[インターフェイス]]を他の[[インターフェイス]]が[[継承]]することはできません
[SRC[>>36]]。

* 引数

[53] これらの[[拡張属性]]は、[[引数]]なしか、
[[識別子リスト]]のいずれかでなければなりません [SRC[>>36]]。

;; [70] [[識別子]]1つだけの指定は認められていません。

[54] [[識別子リスト]]があれば、それらの[[識別子]]が[[大域名]]となります。
なければ、[[インターフェイス名]]が[[大域名]]となります。 [SRC[>>36]]

* 実例

[49] [CODE(DOMi)@en[[[Window]]]] が [CODE(IDL)@en[[[PrimaryGlobal]]]]
[[拡張属性]]つきです。

[50] [CODE(DOMi)@en[[[DedicatedWorker]]]] が
[CODE(IDL)@en[[[Global]]=([[Worker]],[[DedicatedWorker]])]] [[拡張属性]]つきです。

[51] [CODE(DOMi)@en[[[SharedWorker]]]] が
[CODE(IDL)@en[[[Global]]=([[Worker]],[[SharedWorker]])]] [[拡張属性]]つきです。

[66] [CODE(DOMi)@en[[[ServiceWorker]]]] が
[CODE(IDL)@en[[[Global]]]] [[拡張属性]]つきです。

* 歴史

[2] [CITE@en[Remove '''['''PrimaryGlobal''']''']]
([[annevk]]著, [TIME[2017-12-06 22:31:21 +09:00]])
<https://github.com/whatwg/html/commit/dff66be7bd3c2a6ce1a411f2e8c2a1ccac88fd92>

[3] [CITE@en[Remove '''['''PrimaryGlobal''']''' by annevk · Pull Request #2956 · whatwg/html]]
([TIME[2017-12-16 15:32:22 +09:00]])
<https://github.com/whatwg/html/pull/2956>

[4] [CITE@en[Make '''['''Exposed''']''' mandatory, remove '''['''PrimaryGlobal''']''' (#423)]]
([[tobie]]著, [TIME[2017-12-07 00:10:16 +09:00]])
<https://github.com/heycam/webidl/commit/d59937304702d033358b89fac5b5562c23b56096>

[5] [CITE@en[Investigate removing '''['''PrimaryGlobal''']''' and requiring '''['''Exposed''']''' · Issue #365 · heycam/webidl]]
([TIME[2017-12-16 15:45:47 +09:00]])
<https://github.com/heycam/webidl/issues/365>

[6] [CITE@en[Make '''['''Exposed''']''' mandatory, remove '''['''PrimaryGlobal''']''' by tobie · Pull Request #423 · heycam/webidl]]
([TIME[2017-12-16 15:51:05 +09:00]])
<https://github.com/heycam/webidl/pull/423>