8.9. ~systemの状態と能力

8.9.1. `Navigator^I ~obj

`Window$I の `navigator@m 取得子は、 `Navigator$I ~interfaceの~instanceを返す — それは、~UA(~client)の同一性と状態を表現することに加え、~web~pageが あり得る~protocol~handlerとして,自身を登録することを許容する: ◎ The navigator attribute of the Window interface must return an instance of the Navigator interface, which represents the identity and state of the user agent (the client), and allows web pages to register themselves as potential protocol handlers:

[Exposed=Window]
interface `Navigator@I {
  /* 
この~interfaceを実装している~objは、下に与える~interfaceも実装する。
◎
objects implementing this interface also implement the interfaces given below
 */
};
`Navigator$I includes `NavigatorID$I;
`Navigator$I includes `NavigatorLanguage$I;
`Navigator$I includes `NavigatorOnLine$I;
`Navigator$I includes `NavigatorContentUtils$I;
`Navigator$I includes `NavigatorCookies$I;
`Navigator$I includes `NavigatorPlugins$I;
`Navigator$I includes `NavigatorConcurrentHardware$I;

これらの~interface~mixinが別々に定義されるのは、 `WorkerNavigator$I が `Navigator$I ~interfaceの各部を再利用できるようにするためである。 ◎ These interface mixins are defined separately so that WorkerNavigator can re-use parts of the Navigator interface.

8.9.1.1. ~clientの識別

interface mixin `NavigatorID@I {
  readonly attribute DOMString `appCodeName$m; /* 
常に `Mozilla^l
◎
constant "Mozilla"
 */
  readonly attribute DOMString `appName$m; /* 
常に `Netscape^l
◎
constant "Netscape"
 */
  readonly attribute DOMString `appVersion$m;
  readonly attribute DOMString `platform$m;
  readonly attribute DOMString `product$m; /* 
常に `Gecko^l
◎
constant "Gecko"
 */
  [`Exposed$=Window] readonly attribute DOMString `productSub$m;
  readonly attribute DOMString `userAgent$m;
  [`Exposed$=Window] readonly attribute DOMString `vendor$m;
  [`Exposed$=Window] readonly attribute DOMString `vendorSub$m; /* 
常に空~文字列
◎
constant ""
 */
};

産業界における最善な労にもかかわらず,ある種の事例では、~web~browserには,~web作者に対処を強いるような~bugや制限がある。 ◎ In certain cases, despite the best efforts of the entire industry, web browsers have bugs and limitations that web authors are forced to work around.

この節では、これらの課題に対処するため,~scriptから利用-中の~UAの種類を決定するために利用できる 一連の属性を定義する。 ◎ This section defines a collection of attributes that can be used to determine, from script, the kind of user agent in use, in order to work around these issues.

~UAは、次のいずれかを値にとる `~navigator互換性~mode@ を持つ ⇒# `Chrome^i, `Gecko^i, `WebKit^i ◎ The user agent has a navigator compatibility mode, which is either Chrome, Gecko, or WebKit.

注記: `~navigator互換性~mode$は、 `NavigatorID$I ~interfaceにおける[ 各種 属性~値, [ `taintEnabled()$m / `oscpu$m ]の有無 ]を,[ 既存の~web内容と互換であることが既知である組合n ]に拘束する。 ◎ The navigator compatibility mode constrains the NavigatorID interface to the combinations of attribute values and presence of taintEnabled() and oscpu that are known to be compatible with existing web content.

~client検出は、常に,既知である現在の~versionを検出するものに制限されるベキである — 将来の/未知な~versionは、常に,全部的に準拠するものと見做されるベキである。 ◎ Client detection should always be limited to detecting known current versions; future versions and unknown versions should always be assumed to be fully compliant.

%self . `navigator$m . `appCodeName$m
文字列 `Mozilla^l を返す。 ◎ Returns the string "Mozilla".
%self . `navigator$m . `appName$m
文字列 `Netscape^l を返す。 ◎ Returns the string "Netscape".
%self . `navigator$m . `appVersion$m
~browserの~versionを返す。 ◎ Returns the version of the browser.
%self . `navigator$m . `platform$m
~platformの名前を返す。 ◎ Returns the name of the platform.
%self . `navigator$m . `product$m
文字列 `Gecko^l を返す。 ◎ Returns the string "Gecko".
%window . `navigator$m . `productSub$m
文字列[ `20030107^l, `20100101^l ]いずれかを返す。 ◎ Returns either the string "20030107", or the string "20100101".
%self . `navigator$m . `userAgent$m
完全な `User-Agent^h ~headerを返す。 ◎ Returns the complete `User-Agent` header.
%window . `navigator$m . `vendor$m
次のいずれかの文字列を返す ⇒ 空~文字列, `Apple Computer, Inc.^l, `Google Inc.^l ◎ Returns either the empty string, the string "Apple Computer, Inc.", or the string "Google Inc.".
%window . `navigator$m . `vendorSub$m
空~文字列を返す。 ◎ Returns the empty string.

【 “%window . …” は `Window^I にのみ公開され,~worker環境では利用できない( [`Exposed$=Window] )。 】

`appCodeName@m 取得子~手続きは、文字列 `Mozilla^l を返す。 ◎ Must return the string "Mozilla".
`appName@m 取得子~手続きは、文字列 `Netscape^l を返す。 ◎ Must return the string "Netscape".

`appVersion@m 取得子~手続きは、[ 文字列 `4.0^l, または ~browserの~versionを詳細に表現する文字列 ]を返す。 ◎ Must return either the string "4.0" or a string representing the version of the browser in detail,\

例: `1.0 (VMS; en-US) Mellblomenator/9000^l ◎ e.g. "1.0 (VMS; en-US) Mellblomenator/9000".

`platform@m 取得子~手続きは、[ 空~文字列, または ~browserを実行している~platformを表現する文字列 ]を返す。 ◎ Must return either the empty string or a string representing the platform on which the browser is executing,\

例: `MacIntel^l / `Win32^l / `FreeBSD i386^l / `WebTV OS^l ◎ e.g. "MacIntel", "Win32", "FreeBSD i386", "WebTV OS".

`product@m 取得子~手続きは、文字列 `Gecko^l を返す。 ◎ Must return the string "Gecko".
`productSub@m 取得子~手続きは、`~navigator互換性~mode$に応じて,次に与える文字列を返す ⇒# `Chrome^i ならば `20030107^l / `WebKit^i ならば `20030107^l / `Gecko^i ならば `20100101^l ◎ Must return the appropriate string from the following list: ◎ If the navigator compatibility mode is Chrome or WebKit • The string "20030107". ◎ If the navigator compatibility mode is Gecko • The string "20100101".
`userAgent@m 取得子~手続きは、`既定の~User-Agent値$を返す。 ◎ Must return the default `User-Agent` value.
`vendor@m 取得子~手続きは、`~navigator互換性~mode$に応じて,次に与える文字列を返す ⇒# `Chrome^i ならば `Google Inc.^l / `Gecko^i ならば 空~文字列 / `WebKit^i ならば `Apple Computer, Inc.^l ◎ Must return the appropriate string from the following list: ◎ If the navigator compatibility mode is Chrome • The string "Google Inc.". ◎ If the navigator compatibility mode is Gecko • The empty string. ◎ If the navigator compatibility mode is WebKit • The string "Apple Computer, Inc.".
`vendorSub@m 取得子~手続きは、空~文字列を返す。 ◎ Must return the empty string.

[ `~navigator互換性~mode$ ~EQ `Gecko^i ]の場合、~UAは,次の部分的~interfaceも~supportするモノトスル: ◎ If the navigator compatibility mode is Gecko, then the user agent must also support the following partial interface:

`taintEnabled()@m 取得子~手続きは、 ~F を返す。 ◎ The taintEnabled() method must return false.

`oscpu@m 取得子~手続きは、空~文字列 または ~browserを実行している~platformを表現する文字列を返す。 【"oscpu" = “OS + CPU”】 ◎ The oscpu attribute's getter must return either the empty string or a string representing the platform on which the browser is executing,\

例: `Windows NT 10.0; Win64; x64^l / `Linux x86_64^l ◎ e.g. "Windows NT 10.0; Win64; x64", "Linux x86_64".

~FINGERPRINTING この~APIにおける 利用者ごとに変わるような どの情報も、利用者を~profileするために利用され得る。 事実,そのような情報が十分~可用にされた場合、利用者は実際に一意に識別され得る。 この理由から、~UA実装者には,この~APIには アリな限り少ない情報を含めることが,強く督促される。 ◎ (This is a tracking vector.) Any information in this API that varies from user to user can be used to profile the user. In fact, if enough such information is available, a user can actually be uniquely identified. For this reason, user agent implementers are strongly urged to include as little information in this API as possible.

8.9.1.2. 言語~選好

interface mixin `NavigatorLanguage@I {
  readonly attribute DOMString `language$m;
  readonly attribute FrozenArray<DOMString> `languages$m;
};
%self . `navigator$m . `language$m
利用者が最も選好する言語を表現する,言語~tagを返す。 ◎ Returns a language tag representing the user's preferred language.
%self . `navigator$m . `languages$m
利用者が選好する言語たちを表現する,言語~tagからなる配列を返す — 最も選好する言語が最初に来る。 ◎ Returns an array of language tags representing the user's preferred languages, with the most preferred language first. ◎ The most preferred language is the one returned by navigator.language.

注記: `languagechange$et ~eventは、[ ~UAが解する所の,利用者が選好する言語 ]が変化したとき,[ `Window$I / `WorkerGlobalScope$I ]~objに向けて発火される。 ◎ A languagechange event is fired at the Window or WorkerGlobalScope object when the user agent's understanding of what the user's preferred languages are changes.

`language@m 取得子~手続きは、`確からしい言語$,または, 利用者が最も選好する言語を表現する,妥当な BCP 47 言語~tagを返す。 `BCP47$r ◎ Must return a valid BCP 47 language tag representing either a plausible language or the user's most preferred language. [BCP47]

`languages@m 取得子~手続きは、 1 個~以上の[ 妥当な BCP 47 言語~tag `BCP47$r であって[ `確からしい言語$, または 利用者が選好する言語 ]を表現するもの ]からなる,`凍結d配列$を返す — ~UAは、次に従うモノトスル: ◎ Must return a frozen array of valid BCP 47 language tags representing either one or more plausible languages, or the user's preferred languages,\

  • それらの順序は、最も選好される言語からとする。 ◎ ordered by preference with the most preferred language first.\
  • [ 異なる言語~tag/異なる順序 ]で値を返す必要が生じるまでは、同じ~objを返す。 ◎ The same object must be returned until the user agent needs to return different values, or values in a different order. [BCP47]
  • [ `Window$I / `WorkerGlobalScope$I ]~obj %G 上のこの取得子が[ 新たな言語~tagの集合を返す ]ようにする必要が生じたときは:

    • 次を走らす`大域~taskを~queueする$( `~DOM操作~task源$, %G ) ⇒ %G に向けて,名前 `languagechange$et の`~eventを発火する$
    • 新たな値を実際に返す前に,前項の~taskが実行されるのを待機する
    ◎ Whenever the user agent needs to make the navigator.languages attribute of a Window or WorkerGlobalScope object global return a new set of language tags, the user agent must queue a global task on the DOM manipulation task source given global to fire an event named languagechange at global, and wait until that task begins to be executed before actually returning a new value.

~UAは、 `確からしい言語@ を決定するときは,次を念頭に置くベキである: ◎ To determine a plausible language, the user agent should bear in mind the following:

  • ~FINGERPRINTING この~APIにおける利用者ごとに変わるような情報は、利用者を[ ~profileする/識別する ]ために利用され得る。 ◎ (This is a tracking vector.) Any information in this API that varies from user to user can be used to profile or identify the user.
  • 利用者が出自を~~隠す~service(例: Tor などの匿名性~network)を利用していない場合、出自が類似な利用者たち(例えば,同じ~IP-address-blockからの)が最も互いに判別されにくい値は,そのような利用者たちの大多数が利用している言語である。 `TOR$r ◎ If the user is not using a service that obfuscates the user's point of origin (e.g. the Tor anonymity network), then the value that is least likely to distinguish the user from other users with similar origins (e.g. from the same IP address block) is the language used by the majority of such users. [TOR]
  • 利用者が匿名ng~serviceを利用していて、互いの利用者が判別される可能性を抑制するためとして,同じ値を利用する場合、その値には, `en-US^l が示唆される。 ◎ If the user is using an anonymizing service, then the value "en-US" is suggested; if all users of the service use that same value, that reduces the possibility of distinguishing the users from each other.

~FINGERPRINTING これ以上の指紋収集~行路が導入されないよう、~UAは,この関数に定義される~APIに対しては,同じ~listを利用するベキである — ~HTTP `Accept-Language$h ~headerのときと同じく。 ◎ (This is a tracking vector.) To avoid introducing any more fingerprinting vectors, user agents should use the same list for the APIs defined in this function as for the HTTP `Accept-Language` header.

8.9.1.3. ~custom~scheme~handler: `registerProtocolHandler()^m ~method

interface mixin `NavigatorContentUtils@I {
  [SecureContext] undefined `registerProtocolHandler$m(DOMString %scheme, USVString %url);
  [SecureContext] undefined `unregisterProtocolHandler$m(DOMString %scheme, USVString %url);
};
%window . `navigator$m . `registerProtocolHandler(scheme, url)$m
%url における %scheme 用の~handlerとして, %handler を登録する。 例えば,~online-telephone-messaging~serviceは、自身を `sms:^sc ~scheme用の~handlerとして登録することもできる — 利用者がそのような~linkを~clickしたときに、その~web~siteを利用する機会が与えられるように。 `SMS$r ◎ Registers a handler for scheme at url. For example, an online telephone messaging service could register itself as a handler of the sms: scheme, so that if the user clicks on such a link, they are given the opportunity to use that web site. [SMS]
%url 内の文字列 `%s^l は、[ 取扱われることになる内容の~URL ]に置き換えられる仮入力として利用される。 ◎ The string "%s" in url is used as a placeholder for where to put the URL of the content to be handled.
~UAが登録を阻止する場合、 `SecurityError$E 例外が投出される(一例として, `http^sc 用の~handlerを登録しようと試行した場合)。 ◎ Throws a "SecurityError" DOMException if the user agent blocks the registration (this might happen if trying to register as a handler for "http", for instance).
%url 内に文字列 `%s^l が見当たらない場合、 `SyntaxError$E 例外が投出される。 ◎ Throws a "SyntaxError" DOMException if the "%s" string is missing in url.
%window . `navigator$m . `unregisterProtocolHandler(scheme, url)$m
引数で記述される~handlerを未登録にする。 ◎ Unregisters the handler given by the arguments.
~UAが未登録にするのを阻止する場合、 `SecurityError$E が投出される(一例として,~schemeが妥当でない場合に起こり得る)。 ◎ Throws a "SecurityError" DOMException if the user agent blocks the deregistration (this might happen if with invalid schemes, for instance).
%url 内に文字列 `%s^l が見当たらない場合、 `SyntaxError$E 例外が投出される。 ◎ Throws a "SyntaxError" DOMException if the "%s" string is missing in url.

`registerProtocolHandler(scheme, url)@m ~method手続きは: ◎ The registerProtocolHandler(scheme, url) method steps are:

  1. ( %正規化した~scheme, %正規化した~URL文字列 ) ~LET `~protocol~handler~parameterを正規化する$( %scheme, %url, 此れに`関連な設定群~obj$ ) ◎ Let (normalizedScheme, normalizedURLString) be the result of running normalize protocol handler parameters with scheme, url, and this's relevant settings object.
  2. `並列的$に ⇒ ( %正規化した~scheme, %正規化した~URL文字列 ) 用の~handlerを登録する: ◎ In parallel: register a handler for normalizedScheme and normalizedURLString.\

    ~UAは、以下に従うとする: ◎ \

    • ~handlerを登録するときは、他所に述べられる拘束の下で,好きに行ってヨイ。 一例として、次を行うこともできる: ◎ User agents may, within the constraints described, do whatever they like. A user agent could, for instance,\

      • 利用者に~promptして,[ ~handlerの選抜listに~siteを追加する / 既定の~handlerにする / 要請を取消す ]機会を提供する。 ◎ prompt the user and offer the user the opportunity to add the site to a shortlist of handlers, or make the handlers their default, or cancel the request.\
      • 黙って情報を収集しておいた上で、利用者に関連するときに限り,前項を供する。 ◎ User agents could also silently collect the information, providing it only when relevant to the user.
    • 同じ要請が利用者に繰返し~promptされないよう,どの~siteが どの~handlerを登録したか追跡し続けるベキである(利用者が登録を辞退した場合も含めて)。 ◎ User agents should keep track of which sites have registered handlers (even if the user has declined such registrations) so that the user is not repeatedly prompted with the same request.
    • 登録した~handlerを所与の ( `~URL$ %入力~URL ) 用に利用するときは: ◎ When the user agent uses this handler for a URL inputURL:

      1. ~Assert: %入力~URL の`~scheme$url ~EQ %正規化した~scheme ◎ Assert: inputURL's scheme is normalizedScheme.
      2. %入力~URL文字列 ~LET `~URLを直列化する$( %入力~URL ) ◎ Let inputURLString be the serialization of inputURL.
      3. %符号化した~URL ~LET `文字列を~UTF-8~percent-符号化する$( %入力~URL文字列, `成分~percent-符号化-集合$ ) ◎ Let encodedURL be the result of running UTF-8 percent-encode on inputURLString using the component percent-encode set.
      4. %~handler~URL文字列 ~LET %正規化した~URL文字列 ◎ Let handlerURLString be normalizedURLString.
      5. %~handler~URL文字列 の中の最初に現れる文字列 `%s^l を %符号化した~URL に置換する ◎ Replace the first instance of "%s" in handlerURLString with encodedURL.
      6. %結果~URL ~LET `~URL構文解析する$( %~handler~URL文字列 ) ◎ Let resultURL be the result of parsing handlerURLString.
      7. 適切な`閲覧文脈$を %結果~URL へ`~navigate$する ◎ Navigate an appropriate browsing context to resultURL.

      利用者が ~site `https://example.com/^c を訪問している間に,次が~callされたとする: ◎ If the user had visited a site at https://example.com/ that made the following call:

      navigator.registerProtocolHandler('web+soup', 'soup?url=`%s^_')
      

      しばらく経ってから `https://www.example.net/^c を訪問している間、次のような~linkを~clickしたとする: ◎ ...and then, much later, while visiting https://www.example.net/, clicked on a link such as:

      <a href="web+soup:chickenkïwi.soup">チキンのキーウィスープをダウンロードする</a>
      

      このとき,~UAは、次の~URLへ~navigateするであろう: ◎ ...then the UA might navigate to the following URL:

      `https://example.com/soup?url=web+soup:chicken-k%C3%AFwi^l
      

      この~siteは、何であれ `soup^c についての何かを行うこともできる(それを合成した上で,利用者に送るなど)。 ◎ This site could then do whatever it is that it does with soup (synthesize it and ship it to the user, or whatever).

      これは、当の~handlerがいつ利用されるかは,定義しない。 文書~間を`~navigate$するときの処理~modelは、関連な事例を ある程度~定義するが、一般に,[ さもなければ,~native~pluginや~helper~appに~schemeを手渡すことを考慮することになる所 ]では、~UAは,この情報を利用してもヨイ。 ◎ This does not define when the handler is used. To some extent, the processing model for navigating across documents defines some cases where it is relevant, but in general user agents may use this information wherever they would otherwise consider handing schemes to native plugins or helper applications.

`unregisterProtocolHandler(scheme, url)@m ~method手続きは: ◎ The unregisterProtocolHandler(scheme, url) method steps are:

  1. ( %正規化した~scheme, %正規化した~URL文字列 ) ~LET `~protocol~handler~parameterを正規化する$( %scheme, %url, 此れに`関連な設定群~obj$ ) ◎ Let (normalizedScheme, normalizedURLString) be the result of running normalize protocol handler parameters with scheme, url, and this's relevant settings object.
  2. `並列的$に ⇒ ( %正規化した~scheme, %正規化した~URL文字列 ) で記述される~handlerを未登録にする ◎ In parallel: unregister the handler described by normalizedScheme and normalizedURLString.

`~protocol~handler~parameterを正規化する@ ときは、所与の ( 文字列 %~scheme, 文字列 %url, `環境~設定群~obj$ %環境 ) に対し,次の手続きを走らす: ◎ To normalize protocol handler parameters, given a string scheme, a string url, and an environment settings object environment, run these steps:

  1. %~scheme ~SET `~ASCII小文字~化する$( %~scheme ) ◎ Set scheme to scheme, converted to ASCII lowercase.
  2. ~IF[ %~scheme は次のいずれでもない ]…

    • `安全とされる~scheme$である
    • `web+^l から開始していて,後続する部分は 1 個以上の`~ASCII英小文字$のみからなる

    …ならば ⇒ ~THROW `SecurityError$E

    ◎ If scheme is neither a safelisted scheme nor a string starting with "web+" followed by one or more ASCII lower alphas, then throw a "SecurityError" DOMException.

    注記: %~scheme 内に~colonを含めると(例: `mailto:^l ),この段で投出されることになる。 ◎ This means that including a colon in scheme (as in "mailto:") will throw.

    `安全とされる~scheme@ は、次に挙げるものからなる: ◎ The following schemes are the safelisted schemes:

    • `bitcoin^sc
    • `geo^sc
    • `im^sc
    • `irc^sc
    • `ircs^sc
    • `magnet^sc
    • `mailto^sc
    • `mms^sc
    • `news^sc
    • `nntp^sc
    • `openpgp4fpr^sc
    • `sip^sc
    • `sms^sc
    • `smsto^sc
    • `ssh^sc
    • `tel^sc
    • `urn^sc
    • `webcal^sc
    • `wtai^sc
    • `xmpp^sc

    注記: この~listは変更され得る。 追加されるべき~schemeがあれば、~feedbackを送られたし。 ◎ This list can be changed. If there are schemes that ought to be added, please send feedback.

  3. ~IF[ %url は文字列 `%s^l を包含していない ] ⇒ ~THROW `SyntaxError$E ◎ If url does not contain "%s", then throw a "SyntaxError" DOMException.
  4. ( %~URL~record, %~URL文字列 ) ~LET %url を %環境 に`相対的に構文解析-$した ( `結果の~URL~record$, `結果の~URL文字列$ ) ◎ Parse url relative to environment.
  5. ~IF[ %~URL~record ~EQ `失敗^i ] ⇒ ~THROW `SyntaxError$E ◎ If that fails, then throw a "SyntaxError" DOMException.

    注記: 仮入力 `%s^l が %url の[ ~host/~port ]†内にある事例では、この段が強制される。 【† ~schemeが除外されている理由】 ◎ This is forcibly the case if the %s placeholder is in the host or port of the URL.

  6. ~IF[ %~URL~record の`~scheme$url ~NEQ `https^l ]~OR[ ( %~URL~record の`生成元$url, %環境 の`生成元$enV ) は`同一-生成元$でない ] ⇒ ~THROW `SecurityError$E ◎ If the resulting URL record's scheme is not "https" or the resulting URL record's origin is not same origin with environment's origin, then throw a "SecurityError" DOMException.
  7. ~RET ( %~scheme, %~URL文字列 ) ◎ Return (scheme, resulting URL string).

    注記: `結果の~URL文字列$は、~URL内では妥当な成分でない文字列 `%s^l を含むので,定義により`妥当な~URL文字列$にはならない。 ◎ The resulting URL string will by definition not be a valid URL string as it includes the string "%s" which is not a valid component in a URL.

8.9.1.3.1. ~securityと~privacy

~custom~scheme~handlerは、いくつかの懸念 — 特に~privacy上の懸念 — を導入し得る: ◎ Custom scheme handlers can introduce a number of concerns, in particular privacy concerns.

すべての~web用法の乗取り
~UAは、`~HTTP_S~scheme$など,通常運用の要となる~schemeに対しては、第三者主体~siteに経由し直されることを許容するベキでない。 これを許容すると、利用者の活動は自明に追跡され,~secureな接続であろうが 利用者~情報は収集されることになる。 ◎ Hijacking all web usage. User agents should not allow schemes that are key to its normal operation, such as an HTTP(S) scheme, to be rerouted through third-party sites. This would allow a user's activities to be trivially tracked, and would allow user information, even in secure connections, to be collected.
既定に対する乗取り
~UAには、どの既定も自動的に変更しないことが強く督促される — そうすると,利用者が期待していない~remote~hostへ~dataが送信されかねないので。 自身を登録している新たな~handlerに,自動的にその種の~siteを利用させることは、決して生じるベキでない。 ◎ Hijacking defaults. User agents are strongly urged to not automatically change any defaults, as this could lead the user to send data to remote hosts that the user is not expecting. New handlers registering themselves should never automatically cause those sites to be used.
~spam的な登録
~UAは、ある~siteが多数の~handlerを登録しようと試みる可能性を考慮するベキである。 複数の~domainから行われる場合もある(例えば、異なる~domain上にある 一連の~pageを通して~redirectして、複数の `web+mpeg^mt 用の~handlerを登録するなど — 他の~web~browser特能を濫用するような,相似する実施は、~pornography~web~siteにより何年も利用されている)。 ~UAは、そのような敵対的な試みを上品に取扱って,利用者を保護するベキである。 ◎ Registration spamming. User agents should consider the possibility that a site will attempt to register a large number of handlers, possibly from multiple domains (e.g., by redirecting through a series of pages each on a different domain, and each registering a handler for web+spam: — analogous practices abusing other web browser features have been used by pornography web sites for many years). User agents should gracefully handle such hostile attempts, protecting the user.
敵対的~handler~metadata
~UAは、自身の~UI内に埋込まれる文字列を利用する代表的な攻撃に抗して,保護するベキである — 例えば、そのような文字列~内の~markupや文字~escapeは 実行されず, ~NULL ~byteは 適正に取扱われ, 長過ぎる文字列により~crashや~buffer-overrunは 生じないこと, 等々を確保するなど。 ◎ Hostile handler metadata. User agents should protect against typical attacks against strings embedded in their interface, for example ensuring that markup or escape characters in such strings are not executed, that null bytes are properly handled, that over-long strings do not cause crashes or buffer overruns, and so forth.
私的~dataの漏洩ng
~web~page作者は、私的と見なされる~URL~dataを利用して,~custom~scheme~handlerを参照することもあろう — 利用者が ある組織の内側にある~pageを指す~handlerを選ぶことを期待して,それにより、敏感な~dataは第三者主体に公開されないことが確保されるよう。 しかしながら、利用者は,外部~siteを指している~handlerを登録するかもしれず、その場合,その第三者主体へ~dataが漏洩する。 実装者は、[ ある種の[ 下位domain/内容~型/~scheme ]に対しては、【~intranetなどの】管理者が~custom~handlerを不能化できる ]ようにしたいと考えるかもしれない。 ◎ Leaking private data. Web page authors may reference a custom scheme handler using URL data considered private. They might do so with the expectation that the user's choice of handler points to a page inside the organization, ensuring that sensitive data will not be exposed to third parties. However, a user may have registered a handler pointing to an external site, resulting in a data leak to that third party. Implementors might wish to consider allowing administrators to disable custom handlers on certain subdomains, content types, or schemes.
資格証の漏洩ng
~UAは、[ ~URL内に~escapeして含められた~usernameや~password情報 ]は~handler~siteへは,決して送信されないようにするモノトスル。 ~UAは、~accessに認証を要求することが既知である資源の~URLに対しては,~webに基づく~handlerに渡そうと試みることさえ避けてもヨイ — そのような~siteは、利用者に資格証を~~入力してもらうよう自身を~promptすることなしには,当の資源に~accessできないので(それは、利用者が第三者主体の~handlerを信用するかどうかを知ること — 多くの利用者が下せないか理解できない裁定 — を要求する実施である)。 ◎ Leaking credentials. User agents must never send username or password information in the URLs that are escaped and included sent to the handler sites. User agents may even avoid attempting to pass to web-based handlers the URLs of resources that are known to require authentication to access, as such sites would be unable to access the resources in question without prompting the user for credentials themselves (a practice that would require the user to know whether to trust the third-party handler, a decision many users are unable to make or even understand).
~UIへの干渉
~UAは、~methodに意図的に長い引数が渡されたときの~~対策も講じておくベキである。 例えば、公開される~UI内に 2 個の~button[ “受認-”, “否認-” ]があって,~handlerの名前が “受認-” ~buttonに束ねられている場合、長い名前により “否認-” ~buttonが~screen外へ押し出されないようにすることが重要になる。 ◎ Interface interference. User agents should be prepared to handle intentionally long arguments to the methods. For example, if the user interface exposed consists of an "accept" button and a "deny" button, with the "accept" binding containing the name of the handler, it's important that a long name not cause the "deny" button to be pushed off the screen.

8.9.1.4. ~cookie

interface mixin `NavigatorCookies@I {
  readonly attribute boolean `cookieEnabled$m;
};
%window . `navigator$m . `cookieEnabled$m
~cookieを設定しても無視されるならば ~F / ~ELSE_ ~T を返す。 ◎ Returns false if setting a cookie will be ignored, and true otherwise.
`cookieEnabled@m 取得子~手続きは、~UAが[ `HTTP State Management Mechanism^cite `COOKIES$r に則って~cookieを取扱うよう試みるならば ~T / ~ELSE_ すなわち~cookie変更-要請を無視するならば ~F ]を返す。 ◎ The cookieEnabled attribute must return true if the user agent attempts to handle cookies according to HTTP State Management Mechanism, and false if it ignores cookie change requests. [COOKIES]

8.9.1.5. ~plugin

interface mixin `NavigatorPlugins@I {
  [`SameObject$] readonly attribute `PluginArray$I `plugins$m;
  [`SameObject$] readonly attribute `MimeTypeArray$I `mimeTypes$m;
  boolean `javaEnabled()$m;
};

[Exposed=Window,
`LegacyUnenumerableNamedProperties$]
interface `PluginArray@I {
  undefined `refresh$pA(optional boolean reload = false);
  readonly attribute unsigned long `length$pA;
  getter `Plugin$I? `item$pA(unsigned long index);
  getter `Plugin$I? `namedItem$pA(DOMString name);
};

[Exposed=Window,
`LegacyUnenumerableNamedProperties$]
interface `MimeTypeArray@I {
  readonly attribute unsigned long `length$mA;
  getter `MimeType$I? `item$mA(unsigned long index);
  getter `MimeType$I? `namedItem$mA(DOMString name);
};

[Exposed=Window,
`LegacyUnenumerableNamedProperties$]
interface `Plugin@I {
  readonly attribute DOMString `name$m;
  readonly attribute DOMString `~description0$m;
  readonly attribute DOMString `filename$m;
  readonly attribute unsigned long `length$m;
  getter `MimeType$I? `item$m(unsigned long index);
  getter `MimeType$I? `namedItem$m(DOMString name);
};

[Exposed=Window]
interface `MimeType@I {
  readonly attribute DOMString `type$m;
  readonly attribute DOMString `description$m;
  readonly attribute DOMString `suffixes$m; /* 
~comma区切りの
◎
comma-separated
 */
  readonly attribute `Plugin$I `enabledPlugin$m;
};
%window . `navigator$m . `plugins$m . `refresh( [ refresh ] )$pA
当の~pageにて~supportされる[ ~pluginの~list, ~MIME型の~list ]を更新した上で、いずれかの~listが変化していた場合には,~pageを読込直す。 ◎ Updates the lists of supported plugins and MIME types for this page, and reloads the page if the lists have changed.
%window . `navigator$m . `plugins$m . `length$pA
~UAが報告する[ `Plugin$I ~objで表現される~plugin ]たちの個数を返す。 ◎ Returns the number of plugins, represented by Plugin objects, that the user agent reports.
%plugin = %window . `navigator$m . `plugins$m . `item(index)$pA
%window . `navigator$m . `plugins$m[%index]
指定された `Plugin$I ~objを返す。 ◎ Returns the specified Plugin object.
%plugin = %window . `navigator$m . `plugins$m . `item(name)$pA
%window . `navigator$m . `plugins$m[%name]
所与の名前を有する~pluginに対する `Plugin$I ~objを返す。 ◎ Returns the Plugin object for the plugin with the given name.
%window . `navigator$m . `mimeTypes$m . `length$mA
~UAが報告する[ 各~pluginにより~supportされる `MimeType$I ~objで表現される~MIME型 ]の個数を返す。 ◎ Returns the number of MIME types, represented by MimeType objects, supported by the plugins that the user agent reports.
%mimeType = %window . `navigator$m . `mimeTypes$m . `item(index)$mA
%window . `navigator$m . `mimeTypes$m[%index]
指定された `MimeType$I ~objを返す。 ◎ Returns the specified MimeType object.
%mimeType = %window . `navigator$m . `mimeTypes$m . `item(name)$mA
%window . `navigator$m . `mimeTypes$m[%name]
所与の~MIME型に対する `MimeType$I ~objを返す。 ◎ Returns the MimeType object for the given MIME type.
%plugin . `name$m
この~pluginの名前を返す。 ◎ Returns the plugin's name.
%plugin . `~description0$m
この~pluginの記述を返す。 ◎ Returns the plugin's description.
%plugin . `filename$m
現在の~platformにて適用-可能なら,この~plugin~libraryの~filenameを返す。 ◎ Returns the plugin library's filename, if applicable on the current platform.
%plugin . `length$m
この~pluginが~supportする `MimeType$I ~objたちで表現される~MIME型の個数を返す。 ◎ Returns the number of MIME types, represented by MimeType objects, supported by the plugin.
%mimeType = %plugin . `item(index)$m
%plugin[%index]
指定された `MimeType$I ~objを返す。 ◎ Returns the specified MimeType object.
%mimeType = %plugin . `item(name)$m
%plugin[%name]
所与の~MIME型に対する `MimeType$I ~objを返す。 ◎ Returns the MimeType object for the given MIME type.
%mimeType . `type$m
~MIME型を返す。 ◎ Returns the MIME type.
%mimeType . `description$m
この~MIME型の記述を返す。 ◎ Returns the MIME type's description.
%mimeType . `suffixes$m
この~MIME型の代表的な~file拡張子を ~comma区切りの~listで返す。 ◎ Returns the MIME type's typical file extensions, in a comma-separated list.
%mimeType . `enabledPlugin$m
この~MIME型を実装する `Plugin$I ~objを返す。 ◎ Returns the Plugin object that implements this MIME type.
%window . `navigator$m . `javaEnabled()$m
~MIME型 `application/x-java-vm^l を~supportする~pluginがあるならば ~T を返す。 ◎ Returns true if there's a plugin that supports the MIME type "application/x-java-vm".
`NavigatorPlugins^I ~obj
`plugins@m 取得子~手続きは、 `PluginArray$I ~objを返す。 ◎ The navigator.plugins attribute must return a PluginArray object.
`mimeTypes@m 取得子~手続きは、 `MimeTypeArray$I ~objを返す。 ◎ The navigator.mimeTypes attribute must return a MimeTypeArray object.

【 これらの属性は、 [SameObject] が付与されているので,常に同じ~objを返す。 返される `PluginArray$I ~obj, `MimeTypeArray$I ~objは、同じ下層の~pluginたちに基づくことを通して,互いに関連する。 】

`PluginArray^I ~obj

`PluginArray$I ~objは、 `~Pluginたち@ を持つ。 それは,いくつかの[ ~UAが~supportする`~plugin$を表現する `Plugin$I ~obj ]からなるが、[ それらの`~plugin$のうち どれが実際に`~Pluginたち$に含められるか ]は,~UAの裁量に委ねられる。 加えて、これらの各`~plugin$(を表現する `Plugin$I ~obj)は, `隠されて@ もヨイ。 `隠されて$いる~pluginは、列挙されないが,それでも名前を利用して検分できる。 ◎ A PluginArray object represents none, some, or all of the plugins supported by the user agent, each of which is represented by a Plugin object. Each of these Plugin objects may be hidden plugins. A hidden plugin can't be enumerated, but can still be inspected by using its name.

【 “~Pluginたち” は、~UAが~supportするあらゆる`~plugin$との区別を簡潔に表すため,この訳に導入した用語である。 】【 `~Pluginたち$のうち,`隠されて$いないものは、 “隠されてない~Pluginたち” とも表記される。 】

注記: `PluginArray$I ~objで表現される`~plugin$たちが[ より少ない / より多く`隠されて$いる ]ほど、利用者の~privacyは保護されることになる。 より多くの~pluginが公開されるほど、指紋収集~用に導出される~bit数は増える。 ~pluginを隠すことは助けになるが,それでも、ごく稀な~pluginでない限り,~siteは、~pluginの~support有無を名前で探ることにより,~pluginの~listを決定できる可能性は高い(普及した~pluginの名前は周知なので)。 したがって~pluginをまったく公開しないことが選好される。 あいにく,多くの旧来の~siteは、この特能を利用して,例えば 動画の再生-にどの~pluginを利用するかを決定している。 したがって,~pluginをまったく公開しないことは、必ずしも満足いくものにはならないかもしれない。 ◎ The fewer plugins are represented by the PluginArray object, and of those, the more that are hidden, the more the user's privacy will be protected. Each exposed plugin increases the number of bits that can be derived for fingerprinting. Hiding a plugin helps, but unless it is an extremely rare plugin, it is likely that a site attempting to derive the list of plugins can still determine whether the plugin is supported or not by probing for it by name (the names of popular plugins are widely known). Therefore not exposing a plugin at all is preferred. Unfortunately, many legacy sites use this feature to determine, for example, which plugin to use to play video. Not exposing any plugins at all might therefore not be entirely plausible.

~UAが作成した `PluginArray$I ~objは`~live$でないモノトスル — すなわち,その`~Pluginたち$は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後は変化しないモノトスル。 ◎ The PluginArray objects created by a user agent must not be live. The set of plugins represented by the objects must not change once an object is created, except when it is updated by the refresh() method.

`~Pluginたち$内の各 `Plugin$I が表現する`~plugin$は、何個かの`~MIME型$を~supportし得る。 そのような各`~plugin$に対しては、~UAは, 1 個~以上の`~MIME型$を `明示的に~support@ するものとして選ぶモノトスル。 ◎ Each plugin represented by a PluginArray can support a number of MIME types. For each such plugin, the user agent must pick one or more of these MIME types to be those that are explicitly supported.

注記: `~plugin$にて`明示的に~support$される`~MIME型$は、 `Plugin$I / `MimeTypeArray$I ~interfaceを通して公開される。 `~plugin$自体と同様に,何が公開されるかが 利用者ごとに様々になる場合、~siteによる指紋収集が可能になる。 したがって,~UAは、すべての`~plugin$利用者に対し — それが~supportする実際の型にかかわらず — 同じ`~MIME型$を公開することが奨励される — 少なくとも,旧来の内容との互換性により課される拘束の中で。 ◎ The explicitly supported MIME types of a plugin are those that are exposed through the Plugin and MimeTypeArray interfaces. As with plugins themselves, any variation between users regarding what is exposed allows sites to fingerprint users. User agents are therefore encouraged to expose the same MIME types for all users of a plugin, regardless of the actual types supported... at least, within the constraints imposed by compatibility with legacy content.

~FINGERPRINTING `PluginArray$I ~objが`~supportする~prop~index$は、 0 以上[ ~objの`隠されてない~Pluginたち$の個数 ]未満とする。 ◎ (This is a tracking vector.) The supported property indices of a PluginArray object are the numbers from zero to the number of non-hidden plugins represented by the object, if any.

~FINGERPRINTING `length@pA 取得子~手続きは、此れの`隠されてない~Pluginたち$の個数を返す。 ◎ (This is a tracking vector.) The length attribute must return the number of non-hidden plugins represented by the object.

`item(index)@pA ~method手続きは: ◎ The item() method of a PluginArray object must\

  1. ~IF[ %index ~NIN { 此れが`~supportする~prop~index$ } ] ⇒ ~RET ~NULL ◎ return null if the argument is not one of the object's supported property indices, and otherwise must return the result of running the following steps, using the method's argument as index:
  2. ~RET [ 此れの`隠されてない~Pluginたち$を,それぞれの `name$m の字句順に~sortした結果の~list ]内の %index 番の~entry ◎ Let list be the Plugin objects representing the non-hidden plugins represented by the PluginArray object. ◎ Sort list alphabetically by the name of each Plugin. ◎ Return the indexth entry in list.

注記: ~pluginの順序が,追加的な情報 — 例えば~pluginが~installされた順序など — を漏洩しないことは、`~privacyに重要$である。 ◎ It is important for privacy that the order of plugins not leak additional information, e.g., the order in which plugins were installed.

~FINGERPRINTING `PluginArray$I ~objが`~supportする~prop名$は、その`~Pluginたち$それぞれの `name$m 属性の値からなる。 ◎ (This is a tracking vector.) The supported property names of a PluginArray object are the values of the name attributes of all the Plugin objects represented by the PluginArray object.

`namedItem(name)@pA ~method手続きは ⇒ ~RET [ %name ~NIN { 此れが`~supportする~prop名$ } ならば ~NULL / ~ELSE_ 此れの`~Pluginたち$内の[ `name$m ~EQ %name ]なる `Plugin$I ~obj ] ◎ The namedItem() method of a PluginArray object must return null if the argument is not one of the object's supported property names, and otherwise must return the Plugin object, of those represented by the PluginArray object, that has a name equal to the method's argument.

【 すなわち、`~Pluginたち$と, それらが表現する~pluginの名前の集合は、一対一に対応する(ことが暗黙的に規定されていると見受けられる)。 】

`refresh(reload)@pA ~method手続きは: ◎ The refresh() method of the PluginArray object of a Navigator object, when invoked, must\

  1. ~IF[ ~UAが此れを作成した後に、ある`~plugin$が[ ~installされた, または 環境設定し直された ]]~AND[ %reload ~EQ ~T ]:

    1. `location.reload()$m ~methodが~callされたかのように動作する
    2. ~RET
    ◎ check to see if any plugins have been installed or reconfigured since the user agent created the PluginArray object. If so, and the method's argument is true, then\ the user agent must act as if the location.reload() method was called instead.\
  2. [ `plugins$m, `mimeTypes$m ]属性~用に作成された,[ 此れの`~Pluginたち$ / 此れに関連な `MimeTypeArray$I ~objの`~MimeTypeたち$ ]を、次に従って更新する: ◎ Otherwise, the user agent must update the PluginArray object and MimeTypeArray object created for attributes of that Navigator object, and the Plugin and MimeType objects created for those PluginArray and MimeTypeArray objects, using\

    • `Plugin$I ~objのうち,更新-前後で `name$m が同じになるものは、そのまま残す ◎ the same Plugin objects for cases where the name is the same, and\
    • `MimeType$I ~objのうち,更新-前後で `type$m が同じになるものは、そのまま残す ◎ the same MimeType objects for cases where the type is the same, and\
    • 更新-前(すなわち,この~methodが~callされる直前)には合致する~objがなかった[ ~plugin名/~MIME型 ]に対しては、新たな~objを作成する。 ◎ creating new objects for cases where there were no matching objects immediately prior to the refresh() call.\
    • 更新-前からそのまま残された,各[ `Plugin$I / `MimeType$I ]~objの各種 属性は、更新-前の時点と同じ値を返し続けるモノトスル — 更新-前と後の~dataは,整合しなくなるかもしれないが(例えば,そのような `MimeType$I ~obj %T の `enabledPlugin$m が返す `Plugin$I ~objが更新-後に~supportする~MIME型たちには、最早 %T が表現する~MIME型は含まれていないかもしれない)。 ◎ Old Plugin and MimeType objects must continue to return the same values that they had prior to the update, though naturally now the data is stale and may appear inconsistent (for example, an old MimeType entry might list as its enabledPlugin a Plugin object that no longer lists that MimeType as a supported MimeType).
`MimeTypeArray^I ~obj

`MimeTypeArray$I ~objは、~UAが~supportする`~plugin$により`明示的に~support$される`~MIME型$を表現する — そのそれぞれは、 `MimeType$I ~objにより表現される。 ◎ A MimeTypeArray object represents the MIME types explicitly supported by plugins supported by the user agent, each of which is represented by a MimeType object.

~UAが作成した `MimeTypeArray$I ~objは`~live$でないモノトスル。 この~objが表現する~MIME型の集合は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後は変化しないモノトスル。 ◎ The MimeTypeArray objects created by a user agent must not be live. The set of MIME types represented by the objects must not change once an object is created, except when it is updated by the PluginArray object's refresh() method.

`MimeTypeArray$I ~objの[ `~MimeTypeたち@ / `隠されてない~MimeTypeたち@ ]は、[[ 関連な `PluginArray$I ~objの[ `~Pluginたち$ / `隠されてない~Pluginたち$ ]により`明示的に~support$される`~MIME型$ ]を表現している `MimeType$I ~objたちからなるとする。 【これらは、以下を簡潔に記すために,この訳に導入した定義である。】

~FINGERPRINTING `MimeTypeArray$I ~objが`~supportする~prop~index$は、 0 以上[ その`隠されてない~MimeTypeたち$の個数 ]未満とする。 ◎ (This is a tracking vector.) The supported property indices of a MimeTypeArray object are the numbers from zero to the number of MIME types explicitly supported by non-hidden plugins represented by the corresponding PluginArray object, if any.

~FINGERPRINTING `length@mA 取得子~手続きは、此れの`隠されてない~MimeTypeたち$の個数を返す。 ◎ (This is a tracking vector.) The length attribute must return the number of MIME types explicitly supported by non-hidden plugins represented by the corresponding PluginArray object, if any.

`item(index)@mA ~method手続きは: ◎ The item() method of a MimeTypeArray object must return null if the argument is not one of the object's supported property indices, and otherwise must return the result of running the following steps, using the method's argument as index:

  1. ~IF[ %index ~NIN { 此れが`~supportする~prop~index$ } ] ⇒ ~RET ~NULL ◎ ↑
  2. ~RET [ 此れの`隠されてない~MimeTypeたち$を,それぞれの `type$m 値による字句順に~sortした結果の~list ]の %index 番の~entry ◎ Let list be the MimeType objects representing the MIME types explicitly supported by non-hidden plugins represented by the corresponding PluginArray object, if any. ◎ Sort list alphabetically by the type of each MimeType. ◎ Return the indexth entry in list.

注記: ~MIME型の順序が,追加的な情報 — 例えば~pluginが~installされた順序など — を漏洩しないことは、`~privacyに重要$である。 ◎ It is important for privacy that the order of MIME types not leak additional information, e.g. the order in which plugins were installed.

~FINGERPRINTING `MimeTypeArray$I ~objが`~supportする~prop名$は、その`~MimeTypeたち$の `type$m 属性の値からなる。 ◎ (This is a tracking vector.) The supported property names of a MimeTypeArray object are the values of the type attributes of all the MimeType objects represented by the MimeTypeArray object.

`namedItem(name)@mA ~method手続きは ⇒ ~RET [ %name ~NIN { 此れが`~supportする~prop名$ } ならば ~NULL / ~ELSE_ 此れの`~MimeTypeたち$内の[ `type$m ~EQ %name ]なる `MimeType$I ~obj ] ◎ The namedItem() method of a MimeTypeArray object must return null if the argument is not one of the object's supported property names, and otherwise must return the MimeType object that has a type equal to the method's argument.

【 すなわち、`~MimeTypeたち$と, それらが表現する~MIME型の集合は、一対一に対応する(ことが暗黙的に規定されていると見受けられる)。 】

`Plugin^I ~obj

`Plugin$I ~objは、`~plugin$を表現する。 それは、いくつかの属性により,その~pluginについての詳細を供して、`明示的に~support$する`~MIME型$の~listを得するために列挙できる。 ◎ A Plugin object represents a plugin. It has several attributes to provide details about the plugin, and can be enumerated to obtain the list of MIME types that it explicitly supports.

~UAにより作成される `Plugin$I ~objは、`~live$でないモノトスル。 この~objが表現する~MIME型の集合は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後は変化しないモノトスル。 ◎ The Plugin objects created by a user agent must not be live. The set of MIME types represented by the objects, and the values of the objects' attributes, must not change once an object is created, except when updated by the PluginArray object's refresh() method.

`Plugin$I ~objにより `報告される~MIME型たち@ は、この~objが最も近過去に[ 作成された, または `refresh()$pA ~methodにより更新された ]時点で,~objが表現している`~plugin$により`明示的に~support$される`~MIME型$たちである。 ◎ The reported MIME types for a Plugin object are the MIME types explicitly supported by the corresponding plugin when this object was last created or updated by refresh(), whichever happened most recently.

`Plugin$I ~objの `~MimeTypeたち@pI は、[ ~objにより`報告される~MIME型たち$を表現している `MimeType$I ~objたち ]からなるとする。 【これは、以下を簡潔に記すために,この訳に導入した定義である。】

~FINGERPRINTING `Plugin$I ~objが`~supportする~prop~index$は、 0 以上[ その`~MimeTypeたち$pIの個数 ]未満とする。 【原文は “未満” が抜けていると見受けられる。】 ◎ (This is a tracking vector.) The supported property indices of a Plugin object are the numbers from zero to the number of reported MIME types.

~FINGERPRINTING `length@m 取得子は、此れの`~MimeTypeたち$pIの個数を返す。 ◎ (This is a tracking vector.) The length attribute must return the number of reported MIME types.
`item(index)@m

~method手続きは: ◎ The item() method of a Plugin object must\

  1. ~IF[ %index ~NIN { 此れが`~supportする~prop~index$ } ] ⇒ ~RET ~NULL ◎ return null if the argument is not one of the object's supported property indices, and otherwise must return the result of running the following steps, using the method's argument as index:
  2. ~RET [ 此れの`~MimeTypeたち$pIを,それぞれの `type$m 値による字句順に~sortした結果の~list ]の %index 番の~entry ◎ Let list be the MimeType objects representing the reported MIME types. ◎ Sort list alphabetically by the type of each MimeType. ◎ Return the indexth entry in list.

注記: ~MIME型の順序が,追加的な情報 — 例えば~pluginが~installされた順序など — を漏洩しないことは、`~privacyに重要$である。 ◎ It is important for privacy that the order of MIME types not leak additional information, e.g. the order in which plugins were installed.

~FINGERPRINTING `Plugin$I ~objが`~supportする~prop名$は、その`~MimeTypeたち$pIの `type$m 属性の値からなる。 ◎ (This is a tracking vector.) The supported property names of a Plugin object are the values of the type attributes of the MimeType objects representing the reported MIME types.

`namedItem(name)@m ~method手続きは ⇒ ~RET[ %name ~NIN { 此れが`~supportする~prop名$ } ならば ~NULL / ~ELSE_ `MimeType$I ~objのうち[ `type$m ~EQ %name ]なるもの ]を返すモノトスル。 ◎ The namedItem() method of a Plugin object must return null if the argument is not one of the object's supported property names, and otherwise must return the MimeType object that has a type equal to the method's argument.
`name@m 取得子~手続きは、`~plugin$の名前を返す。 ◎ The name attribute must return the plugin's name.

`~description0@m 取得子~手続き/ `filename@m 取得子~手続きは、どちらも,`実装定義$な(または十中八九,`~plugin$により定義される)文字列を返す。 `refresh()$pA ~methodにより更新される前後を除き、毎回 同じ文字列を返すモノトスル。 ◎ The description and filename attributes must return implementation-defined (in all likelihood, plugin-defined) strings. In each case, the same string must be returned each time, except that the strings returned may change when the refresh() method updates the object.

~FINGERPRINTING これらの取得子が返す値が`~plugin$の~version間で変わる場合、それらは指紋収集~行路に利用され得ることに加え、より重要な点として,`~plugin$が有し得る~securityの脆弱性(したがって,~browserの脆弱性)を決定する自明な仕方にも利用され得る。 したがって[ `~description0$m 取得子は 単に `name$m 取得子と同じ結果 / `filename$m 取得子は空~文字列 ]を返すことが~~強く推奨される。 ◎ (This is a tracking vector.) If the values returned by the description or filename attributes vary between versions of a plugin, they can be used both as a fingerprinting vector and, even more importantly, as a trivial way to determine what security vulnerabilities a plugin (and thus a browser) may have. It is thus highly recommended that the description attribute just return the same value as the name attribute, and that the filename attribute return the empty string.

`MimeType^I ~obj

`MimeType$I ~objは、`~plugin$により`明示的に~support$されている/されていた `~MIME型$を表現する。 ◎ A MimeType object represents a MIME type that is, or was, explicitly supported by a plugin.

~UAが作成した `MimeType$I ~objは`~live$でないモノトスル。 この~objの属性~値は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後は変化しないモノトスル。 ◎ The MimeType objects created by a user agent must not be live. The values of the objects' attributes must not change once an object is created, except when updated by the PluginArray object's refresh() method.

`type@m 取得子~手続きは、`~MIME型$を記述している`~parameterを伴わない妥当な~MIME型~文字列$を返す。 ◎ The type attribute must return the valid MIME type string with no parameters describing the MIME type.

`description@m 取得子~手続き/ `suffixes@m 取得子~手続きは、どちらも,`実装定義$な(または十中八九,`~plugin$により定義される)文字列を返す。 `refresh()$pA ~methodにより更新される前後を除き、毎回 同じ文字列を返すモノトスル。 ◎ The description and suffixes attributes must return user-agent-defined (or, in all likelihood, plugin-defined) strings. In each case, the same string must be returned each time, except that the strings returned may change when the refresh() method updates the object.

~FINGERPRINTING これらの取得子が返す値が`~plugin$の~version間で変わる場合、それらは指紋収集~行路に利用され得ることに加え、より重要な点として,`~plugin$が有し得る~securityの脆弱性(したがって,~browserの脆弱性)を決定する自明な仕方にも利用され得る。 したがって[ `description$m 取得子は 単に `type$m 取得子と同じ値 / `suffixes$m 取得子は空~文字列 ]を返すことが~~強く推奨される。 ◎ (This is a tracking vector.) If the values returned by the description or suffixes attributes vary between versions of a plugin, they can be used both as a fingerprinting vector and, even more importantly, as a trivial way to determine what security vulnerabilities a plugin (and thus a browser) may have. It is thus highly recommended that the description attribute just return the same value as the type attribute, and that the suffixes attribute return the empty string.

注記: `suffixes$m 取得子が返す結果~内の~commaは、互いの~filename拡張子を分離するものと解釈される — `htm,html^l のように。 ◎ Commas in the suffixes attribute are interpreted as separating subsequent filename extensions, as in "htm,html".

`enabledPlugin@m 取得子~手続きは、此れが最も近過去に[ 作成された, または `refresh()$pA により更新された ]時点での,[ `~Pluginたち$のうち,此れが表現する`~MIME型$を`明示的に~support$する`~plugin$を表現するもの ]を返す。 ◎ The enabledPlugin attribute must return the Plugin object that represents the plugin that explicitly supported the MIME type that this MimeType object represents when this object was last created or updated by refresh(), whichever happened most recently.

【 複数の~pluginが同じ~MIME型を~supportする場合にどうなるかは、述べられていない。 】

`javaEnabled()^m ~method
~FINGERPRINTING `NavigatorPlugins$I の `javaEnabled()@m ~method手続きは ⇒ ~RET ~UAは[ `~MIME型$ `application/x-java-vm^l を~supportする`~plugin$ ]を~supportするならば ~T / ~ELSE_ ~F ] ◎ (This is a tracking vector.) The navigator.javaEnabled() method must return true if the user agent supports a plugin that supports the MIME type "application/x-java-vm"; otherwise it must return false.