8.9. ~systemの状態と能力
8.9.1. `Navigator^I ~obj
`Navigator$I の~instanceは、 ~UA(~client)の同一性と状態を表現する。 それはまた、 汎用な大域~objとして~serveする — [ この仕様/他の仕様 ]内の様々な~APIが、 そこに所在する。 ◎ Instances of Navigator represent the identity and state of the user agent (the client). They also serve as a generic global under which various APIs are located in this and other specifications.
[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 reuse parts of the Navigator interface.
各 `Window$I には、 それに `結付けられた~Navigator@ がある — それは、 ある `Navigator$I ~objである。 `Window$I ~objの作成に際しては、 それに`結付けられた~Navigator$を[ 当の `Window$I ~objに`関連な~realm$内に作成される,`新たな$ `Navigator$I ~obj ]に設定するモノトスル。 ◎ Each Window has an associated Navigator, which is a Navigator object. Upon creation of the Window object, its associated Navigator must be set to a new Navigator object created in the Window object's relevant realm.
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 ~mixinにおける[ 各種 属性~値, [ `taintEnabled()$m / `oscpu$m ]の有無 ]を,[ 既存の~web内容と互換であることが既知である組合n ]に拘束する。 ◎ The navigator compatibility mode constrains the NavigatorID mixin 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] )。 】
`appVersion@m 取得子~手続きは:
- %結果 ~LET `既定の~User-Agent値$
- ~Assert: %結果 は文字列 `Mozilla/^l から開始している†
- %結果 ~LET %結果 から,頭部を成す `Mozilla/^l を除去した結果
- ~Assert: %結果 は文字列 `5.0 (^l から開始している†
-
`~navigator互換性~mode$に応じて:
- `Chrome^i / `WebKit^i ⇒ ~RET %結果
-
`Gecko^i:
- ~IF[ %結果 は `5.0 (Windows^l から開始している ] ⇒ ~RET `5.0 (Windows)^l
- ~Assert: %結果 内に文字 `003B^U `;^smb が在る†
- %結果 ~SET %結果 から最初の `003B^U `;^smb 以降の文字列を除去した結果
- ~RET %結果 に文字 `0029^U `)^smb を付加した結果 — 例 ⇒# `5.0 (Macintosh)^l / `5.0 (Android 10)^l / `5.0 (X11)^l
【† これらの ~Assert は、 この訳による補完 — 原文は、 これらの条件を満たすかのように記されている (満たさない場合の挙動が指定されていない — `既定の~User-Agent値$は`実装定義$なので、 理論上は満たさない可能性もあるにもかかわらず)。 】
◎ appVersion ◎ Must return the appropriate string that starts with "5.0 (", as follows: ◎ Let trail be the substring of default `User-Agent` value that follows the "Mozilla/" prefix. ◎ If the navigator compatibility mode is Chrome or WebKit • Return trail. ◎ If the navigator compatibility mode is Gecko • If trail starts with "5.0 (Windows", then return "5.0 (Windows)". • Otherwise, return the prefix of trail up to but not including the first U+003B (;), concatenated with the character U+0029 RIGHT PARENTHESIS. For example, "5.0 (Macintosh)", "5.0 (Android 10)", or "5.0 (X11)".`platform@m 取得子~手続きは ⇒ ~RET 次のいずれか ⇒# ~browserを実行している~platformを表現する文字列/ ~privacyや互換性を得るためとして,別の~platformにて共通して返される文字列
例: `MacIntel^l / `Win32^l / `FreeBSD i386^l / `Linux armv81^l
◎ Must return a string representing the platform on which the browser is executing (e.g. "MacIntel", "Win32", "Linux x86_64", "Linux armv81") or, for privacy and compatibility, a string that is commonly returned on another platform.[ `~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:
partial interface mixin `NavigatorID$I {
[`Exposed$=Window] boolean `taintEnabled$m(); /*
常に ~F
◎
constant false
*/
[`Exposed$=Window] readonly attribute DOMString `oscpu$m;
};
`oscpu@m 取得子~手続きは 【"oscpu" = “OS + CPU”】 ⇒ ~RET 次のいずれか ⇒# 空~文字列 / ~browserを実行している~platformを表現する文字列 ◎ 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".
◎追跡路 この~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.
`languages@m 取得子~手続きは ⇒ ~RET 次を満たす`凍結d配列$: ◎ Must return a frozen array\
- 1 個~以上の妥当な BCP 47 言語~tag `BCP47$r からなる。 ◎ 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.\
加えて、 ~UAは,次に従うモノトスル:
- [ 異なる言語~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 ~LET `大域~taskを~queueする$( `~DOM操作~task~source$, %G, 次の手続き )
手続きは ⇒ `~eventを発火する$( %G, `languagechange$et ) - 新たな値を実際に返す前に, %~task が実行され始めるまで待機する。
-
~UAは、 `確からしい言語@ を決定するときは,次を念頭に置くベキである: ◎ To determine a plausible language, the user agent should bear in mind the following:
- ◎追跡路 この~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]
- 利用者が匿名化~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.
◎追跡路 これ以上の指紋収集~行路が導入されないよう、 ~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. ~browser状態
interface mixin `NavigatorOnLine@I { readonly attribute boolean `onLine$m; };
- %self.`navigator$m.`onLine$m
- ~UAは[ 間違いなく~offlineである(~networkから切断されている)ならば ~F / ~onlineかもしれないならば ~T ]を返す。 ◎ Returns false if the user agent is definitely offline (disconnected from the network). Returns true if the user agent might be online.
- この属性が返す値が変化したときは、[ `online$et / `offline$et ]~eventが発火される。 ◎ The events online and offline are fired when the value of this attribute changes.
[ `Window$I / `WorkerGlobalScope$I ]~obj %大域~obj の `onLine$m 属性が返す値が %X に変化したときは、 次を走らすモノトスル:
- %~event名 ~LET %X に応じて ⇒# ~F ならば `offline$et / ~T ならば `online$et
-
`大域~taskを~queueする$( `~network用~task~source$, %大域~obj, 次の手続き )
手続きは ⇒ `~eventを発火する$( %大域~obj, %~event名 )
注記: この属性は、 内来的に依拠~可能でない。 ~computerは、 ~Internet~accessが無い下でも~networkに接続され得る。 ◎ This attribute is inherently unreliable. A computer can be connected to a network without having Internet access.
この例では、 ~browserが~onlineか~offlineになるに伴い, ある指示子( `id=indicator^c )が更新される。 ◎ In this example, an indicator is updated as the browser goes online and offline.
<!DOCTYPE HTML> <html lang="ja"> <head> <title>~online状態</title> <script> function updateIndicator() { document.getElementById('indicator').textContent = navigator.onLine ? '~online' : '~offline'; } </script> </head> <body onload="updateIndicator()" ononline="updateIndicator()" onoffline="updateIndicator()"> <p>~networkは: <span id="indicator">(未知な状態)</span> </body> </html>
8.9.1.4. ~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:@~RFCx/rfc5724#section-2$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:
- ( %正規化した~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.
-
`~protocol~handlerを登録する@ — 以下に従う下で,`並列的$に ( %正規化した~scheme, %正規化した~URL ) 用の~handlerを登録する: ◎ In parallel: register a protocol handler for normalizedScheme and normalizedURLString.\
-
~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.
コレに`関連な大域~obj$に`結付けられた文書$の[ `~RPH自動化~mode$ ~NEQ `none@rph ]の場合、 ~UAは,次に従うベキである: ◎ If the registerProtocolHandler() automation mode of this's relevant global object's associated Document is not "none", the user agent should\
- 自動化~文脈の下にあることを検証yする ( `WEBDRIVER$r `§ ~securityの考慮点@~WEBDRIVER#security$ を見よ)。 ◎ first verify that it is in an automation context (see WebDriver's security considerations).\
- 上述した[ 情報の通信, 利用者からの同意を得ること ]を素通りして,代わりに利用者が次を行ったかのように動作する ⇒ 利用者は、 登録の詳細を見て,当の要請を`~RPH自動化~mode$の値に応じて ⇒ `autoAccept@rph ならば受容した/ `autoReject@rph ならば却下した ◎ The user agent should then bypass the above communication of information and gathering of user consent,\ and instead do the following based on the value of the registerProtocolHandler() automation mode: • "autoAccept" •• Act as if the user has seen the registration details and accepted the request. • "autoReject" •• Act as if the user has seen the registration details and rejected the request.
~UAが所与の ( `~URL$ %入力~URL ) 用に `登録した~handlerを利用する@ ときは: ◎ When the user agent uses this handler for a URL inputURL:
- ~Assert: %入力~URL の`~scheme$url ~EQ %正規化した~scheme ◎ Assert: inputURL's scheme is normalizedScheme.
- `~usernameを設定する$( %入力~URL, 空~文字列 ) ◎ Set the username given inputURL and the empty string.
- `~passwordを設定する$( %入力~URL, 空~文字列 ) ◎ Set the password given inputURL and the empty string.
- %入力~URL文字列 ~LET `~URLを直列化する$( %入力~URL ) ◎ Let inputURLString be the serialization of inputURL.
- %符号化した~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.
- %~handler~URL文字列 ~LET `~URLを直列化する$( %正規化した~URL ) ◎ Let handlerURLString be normalizedURLString.
- %~handler~URL文字列 の中の最初に現れる文字列 `%s^l を %符号化した~URL に置換する ◎ Replace the first instance of "%s" in handlerURLString with encodedURL.
- %結果~URL ~LET `~URL構文解析する$( %~handler~URL文字列 ) ◎ Let resultURL be the result of parsing handlerURLString.
- 適切な`~navigable$を %結果~URL へ`~navigate$する ◎ Navigate an appropriate navigable 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">チキンのキーウィスープをダウンロードする</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:
- ( %正規化した~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.
- `並列的$に ⇒ ( %正規化した~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:
- %~scheme ~SET `~ASCII小文字~化する$( %~scheme ) ◎ Set scheme to scheme, converted to ASCII lowercase.
-
~IF[ ~NOT ~OR↓ ]…
- %~scheme は`安全とされる~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
- `ftp^sc
- `ftps^sc
- `geo^sc
- `im^sc
- `irc^sc
- `ircs^sc
- `magnet^sc
- `mailto^sc
- `matrix^sc
- `mms^sc
- `news^sc
- `nntp^sc
- `openpgp4fpr^sc
- `sftp^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.
- ~IF[ %~URL は文字列 `%s^l を包含していない ] ⇒ ~THROW `SyntaxError$E ◎ If url does not contain "%s", then throw a "SyntaxError" DOMException.
- %~URL~record ~LET `~URLを符号化法の下で相対的に構文解析する$( %~URL, %環境 ) ◎ Let urlRecord be the result of encoding-parsing a URL given url, relative to environment.
-
~IF[ %~URL~record ~EQ `失敗^i ] ⇒ ~THROW `SyntaxError$E ◎ If urlRecord is failure, then throw a "SyntaxError" DOMException.
注記: 仮入力 `%s^l が %~URL の[ ~host/~port ]†内にある事例では、 この段が強制される。 【† `~schemeが除外されている理由@https://github.com/web-platform-tests/wpt/pull/24886$】 ◎ This is forcibly the case if the %s placeholder is in the host or port of the URL.
- ~IF[ %~URL~record の`~scheme$url は`~HTTP_S~scheme$でない ]~OR[ ( %~URL~record の`生成元$url, %環境 の`生成元$enV ) は`同一-生成元$でない ] ⇒ ~THROW `SecurityError$E ◎ If urlRecord's scheme is not an HTTP(S) scheme or urlRecord's origin is not same origin with environment's origin, then throw a "SecurityError" DOMException.
-
~Assert: %~URL~record は`信用に価し得る~URL$である ◎ Assert: the result of Is url potentially trustworthy? given urlRecord is "Potentially Trustworthy".
注記: この~algoは,`~secureな文脈$enVの中で走るので、 これは,`同一-生成元$の条件により含意される。 ◎ Because normalize protocol handler parameters is run within a secure context, this is implied by the same origin condition.
-
~RET ( %~scheme, %~URL~record ) ◎ Return (scheme, urlRecord).
注記: %~URL~record を`直列化した結果@~URL1#concept-url-serializer$は、 ~URL内では妥当な成分でない文字列 `%s^l を含むので, 定義により`妥当な~URL文字列$にはならない。 ◎ The serialization of urlRecord 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.4.1. ~securityと~privacy
~custom~scheme~handlerは、 いくつかの懸念 — 特に,~privacyの懸念 — を導入し得る: ◎ Custom scheme handlers can introduce a number of concerns, in particular privacy concerns.
- すべての~web用法の乗取り ◎ Hijacking all web usage.\
- ~UAは、[ `~HTTP_S~scheme$など,通常運用の要を成す~scheme ]に対しては,[ 第三者-主体~siteに経由し直される ]ことを許容するベキでない。 これを許容すると、 利用者の活動は自明に追跡され,[ ~secureな接続であろうが,利用者~情報は収集される ]ことになる。 ◎ 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.
- 既定に対する乗取り ◎ Hijacking defaults.\
- ~UAには、[ どの既定も自動的に変更しない ]ことが強く督促される — そうすると、 利用者が期待していない~remote~hostへ~dataが送信されかねないので。 自身を登録している新たな~handlerに,自動的にその種の~siteを利用させることは、 決して生じるベキでない。 ◎ 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的な登録 ◎ Registration spamming.\
- ~UAは、[ ある~siteが多数の~handlerを登録しようと試みる可能性 ]を考慮するベキである。 複数の~domainから行われる場合もある (例: 異なる~domain上にある 一連の~pageを通して~redirectして, 複数の `web+mpeg^mt 用の~handlerを登録するなど — 他の~web~browser特能を濫用するような,相似する実施は、 ~pornography~web~siteにより何年も利用されている)。 ~UAは、 そのような敵対的な試みを上品に取扱って, 利用者を保護するベキである。 ◎ 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 ◎ Hostile handler metadata.\
- ~UAは、[ 自身の~UI内に埋込まれる文字列 ]を利用する代表的な攻撃に抗して,保護するベキである — 例えば、 次に挙げるふるまいを確保するなど ⇒# そのような文字列~内の~markupや文字~escapeは,実行しない/ ~NULL ~byteを適正に取扱う/ 長過ぎる文字列により~crashや~buffer-overrunは,生じない/ …等々 ◎ 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 ◎ Leaking private data.\
- ~web~page作者は、 私的と見なされる~URL~dataを利用して, ~custom~scheme~handlerを参照することもあろう — 利用者が[ ある組織の内側にある~pageを指す~handler ]を選ぶことを期待して,それにより[ 敏感な~dataは第三者-主体に公開されない ]ことが確保されるよう。 しかしながら,利用者は[ 外部~siteを指している~handler ]を登録するかもしれず、 その場合,その第三者-主体へ~dataが漏洩する。 実装者は、 ある種の[ 下位domain/内容~型/~scheme ]に対しては,[ 【~intranetなどの】管理者が~custom~handlerを不能化できる ]ようにしたいと考えるかもしれない。 ◎ 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. Implementers might wish to consider allowing administrators to disable custom handlers on certain subdomains, content types, or schemes.
- ~UIへの干渉 ◎ Interface interference.\
- ~UAは、[ ~methodに意図的に長い引数が渡されたとき ]の~~対策も講じておくベキである。 例えば、 公開される~UI内に 2 個の~button[ “受認-”, “否認-” ]があって, ~handlerの名前が “受認-” ~buttonに束ねられている場合、[ 長い名前により “否認-” ~buttonが~screen外へ押し出されないようにする ]ことが重要になる。 ◎ 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.2. `~UA自動化@
各`文書$は、 `~RPH自動化~mode@ を有する。 それは、[ `none$rph, `autoAccept$rph, `autoReject$rph ]いずれかをとり, 既定は `none$rph とする。 ◎ Each Document has a registerProtocolHandler() automation mode. It defaults to "none", but it also can be either "autoAccept" or "autoReject".
【 ~RPHは、 `registerProtocolHandler()$m の略語 (この訳では、 一律に略語表記に統一する)。 】
この標準は、 ~UA自動化と~web~siteを~testする目的~用に, ~WebDriver`拡張~command$ `~RPH登録~modeを設定する@ を定義する。 それは、 ~UAに`文書$を ある~modeの中へ設置するよう指図する — その~modeにおいては、 ~UAは,[ 登録~確認~prompt~dialogを[ 受容して/却下して ]いる利用者 ]を自動的に模倣することになる。 ◎ For the purposes of user agent automation and website testing, this standard defines Set RPH Registration Mode WebDriver extension command. It instructs the user agent to place a Document into a mode where it will automatically simulate a user either accepting or rejecting and registration confirmation prompt dialog.
~HTTP~method | ~URI~template |
---|---|
`POST^M | `/session/{session id}/custom-handlers/set-mode^c |
この~commandの`~remote端~手続き$は 【所与の %~parameter群 に対し】: ◎ The remote end steps are:
- ~IF[ %~parameter群 は~JSON `object^jt でない ] ⇒ ~RET 新たな`~WebDriver~error$ — その ⇒ `~WebDriver~error~code$ ~SET `無効な引数$ ◎ If parameters is not a JSON Object, return a WebDriver error with WebDriver error code invalid argument.
- %~mode ~LET %~parameter群 から `mode^l と命名された`~propを取得する$ ◎ Let mode be the result of getting a property named "mode" from parameters.
- ~IF[ %~mode ~NIN { `autoAccept$rph, `autoReject$rph, `none$rph } ⇒ ~RET 新たな`~WebDriver~error$ — その ⇒ `~WebDriver~error~code$ ~SET `無効な引数$ ◎ If mode is not "autoAccept", "autoReject", or "none", return a WebDriver error with WebDriver error code invalid argument.
- %文書 ~LET `現在の閲覧~文脈$にて`作動中な文書$bc ◎ Let document be the current browsing context's active document.
- %文書 の`~RPH自動化~mode$ ~SET %~mode ◎ Set document's registerProtocolHandler() automation mode to mode.
- ~RET 新たな`成功$ — その ⇒ ~data ~SET ~NULL ◎ Return success with data null.
8.9.1.5. ~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.
8.9.1.6. ~PDF~view用の~support
- %window.`navigator$m.`pdfViewerEnabled$m
- ~UAは次を[ ~supportするならば ~T / ~supportしないならば ~F ]を返す ⇒ ~PDF~fileへ`~navigate$するとき,~inlineで それを~viewする ◎ Returns true if the user agent supports inline viewing of PDF files when navigating to them, or false otherwise.\
- ~supportしない事例では、 当の~PDF~fileは, `外部~softwareにより取扱われる@~HTMLnav#hand-off-to-external-software$ことになる。 ◎ In the latter case, PDF files will be handled by external software.
interface mixin `NavigatorPlugins@I { [SameObject] readonly attribute `PluginArray$I `plugins$m; [SameObject] readonly attribute `MimeTypeArray$I `mimeTypes$m; boolean `javaEnabled$m(); readonly attribute boolean `pdfViewerEnabled$m; }; [Exposed=Window, `LegacyUnenumerableNamedProperties$] interface `PluginArray@I { undefined `refresh$pA(); 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$mP; readonly attribute DOMString `description$mP; readonly attribute DOMString `filename$mP; readonly attribute unsigned long `length$mP; getter `MimeType$I? `item$mP(unsigned long index); getter `MimeType$I? `namedItem$mP(DOMString name); }; [Exposed=Window] interface `MimeType@I { readonly attribute DOMString `type$mM; readonly attribute DOMString `description$mM; readonly attribute DOMString `suffixes$mM; readonly attribute `Plugin$I `enabledPlugin$mM; };
~PDF~viewerの~support有無は、 いまどきは, `pdfViewerEnabled$m を介して検出できるが、 歴史的な理由から,同じ能力を供する[ 複階的で入り組んだ,いくつかの~interface ]があり、 旧来の~codeは,それらに依拠している。 この節では、 前者の単純な現代の変種に加え, 後者の複雑な歴史的な方も指定する。 ◎ Although these days detecting PDF viewer support can be done via navigator.pdfViewerEnabled, for historical reasons, there are a number of complex and intertwined interfaces that provide the same capability, which legacy code relies on. This section specifies both the simple modern variant and the complicated historical one.
各~UAは、 真偽値をとる `~PDF~viewerは~supportされるか@ を有する — その値は、 `実装定義$とする (加えて、利用者-選好に則って変わり得る)。 ◎ Each user agent has a PDF viewer supported boolean, whose value is implementation-defined (and might vary according to user preferences).
注記: この値は、 `~navi$の処理~modelにも影響iする。 ◎ This value also impacts the navigation processing model.
各 `Window$I ~objは、 次に挙げるものを有する: ◎ ↓
-
`~PDF~viewer~plugin~obj~list@ ⇒ ~UAの`~PDF~viewerは~supportされるか$に応じて ⇒# ~F ならば 空~list / ~T ならば 5 個の `Plugin$I ~objを包含する~list ◎ Each Window object has a PDF viewer plugin objects list. If the user agent's PDF viewer supported is false, then it is the empty list. Otherwise, it is a list containing five Plugin objects,\
後者を成す各 `Plugin$I は、 順に,次に挙げる`名前$pGを伴うとする ⇒# `PDF Viewer^l, `Chrome PDF Viewer^l, `Chromium PDF Viewer^l, `Microsoft Edge PDF Viewer^l, `WebKit built-in PDF^l ◎ whose names are, respectively: • "PDF Viewer" • "Chrome PDF Viewer" • "Chromium PDF Viewer" • "Microsoft Edge PDF Viewer" • "WebKit built-in PDF"
`~PDF~viewer~plugin名~list@ は、 順に,上に挙げた値たちから形成される。 ◎ The values of the above list form the PDF viewer plugin names list.
注記: これらの名前は、 ~web~siteに対し,歴史的に何が探索されていたかについての調査結果 — したがって、 ~UAにとって[ 既存の内容との互換性を保守するために,公開すること ]が必要yなもの — に基づいて選ばれた。 これらは,~alphabet順に挙げられているが、 名前 `PDF Viewer^l は — `enabledPlugin$mM 取得子が汎用な~plugin名を指せるよう — 0 番の位置に挿入される。 ◎ These names were chosen based on evidence of what websites historically search for, and thus what is necessary for user agents to expose in order to maintain compatibility with existing content. They are ordered alphabetically. The "PDF Viewer" name was then inserted in the 0th position so that the enabledPlugin getter could point to a generic plugin name.
-
`~PDF~viewer~MIME型~obj~list@ ⇒ ~UAの`~PDF~viewerは~supportされるか$に応じて ⇒# ~F ならば 空~list/ ~T ならば 2 個の `MimeType$I ~objを包含している~list ◎ Each Window object has a PDF viewer mime type objects list. If the user agent's PDF viewer supported is false, then it is the empty list. Otherwise, it is a list containing two MimeType objects,\
後者を成す各 `MimeType$I は、 順に,次に挙げる`型$を伴うとする ⇒# `application/pdf^l, `text/pdf^l ◎ whose types are, respectively: • "application/pdf" • "text/pdf"
`~PDF~viewer~MIME型~list@ は、 順に,上に挙げた型たちから形成される。 ◎ The values of the above list form the PDF viewer mime types list.
各 `NavigatorPlugins$I ~objは、 次に挙げるものを有する: ◎ Each NavigatorPlugins object has\
- `~plugin配列@ ⇒ 新たな `PluginArray$I ~obj ◎ a plugins array, which is a new PluginArray,\
- `~MIME型~配列@ ⇒ 新たな `MimeTypeArray$I ~obj ◎ and a mime types array, which is a new MimeTypeArray.
`NavigatorPlugins$I ~mixinの: ◎ ↓
- `plugins@m 取得子~手続きは ⇒ ~RET コレの`~plugin配列$ ◎ The NavigatorPlugins mixin's plugins getter steps are to return this's plugins array.
- `mimeTypes@m 取得子~手続きは ⇒ ~RET コレの`~MIME型~配列$ ◎ The NavigatorPlugins mixin's mimeTypes getter steps are to return this's mime types array.
- `javaEnabled()@m ~method手続きは ⇒ ~RET ~F ◎ The NavigatorPlugins mixin's javaEnabled() method steps are to return false.
- `pdfViewerEnabled@m 取得子~手続きは ⇒ ~RET ~UAの`~PDF~viewerは~supportされるか$ ◎ The NavigatorPlugins mixin's pdfViewerEnabled getter steps are to return the user agent's PDF viewer supported.
`PluginArray$I ~interfaceの: ◎ ↓
- `~supportする~prop名$は ⇒ ~UAの`~PDF~viewerは~supportされるか$に応じて ⇒# ~T ならば `~PDF~viewer~plugin名~list$ / ~F ならば空~list ◎ The PluginArray interface supports named properties. If the user agent's PDF viewer supported is true, then they are the PDF viewer plugin names. Otherwise, they are the empty list.
-
`namedItem(name)@pA ~method手続きは: ◎ The PluginArray interface's namedItem(name) method steps are:
- コレに`関連な大域~obj$の`~PDF~viewer~plugin~obj~list$を成す ~EACH( `Plugin$I %~plugin ) に対し ⇒ ~IF[ %~plugin の`名前$pG ~EQ %name ] ⇒ ~RET %~plugin ◎ For each Plugin plugin of this's relevant global object's PDF viewer plugin objects: if plugin's name is name, then return plugin.
- ~RET ~NULL ◎ Return null.
- `~supportする~prop~index$は ⇒ コレに`関連な大域~obj$の`~PDF~viewer~plugin~obj~list$の`~index群$ ◎ The PluginArray interface supports indexed properties. The supported property indices are the indices of this's relevant global object's PDF viewer plugin objects.
-
`item(index)@pA ~method手続きは: ◎ The PluginArray interface's item(index) method steps are:
- %~plugin~list ~LET コレに`関連な大域~obj$の`~PDF~viewer~plugin~obj~list$ ◎ Let plugins be this's relevant global object's PDF viewer plugin objects.
- ~IF[ %index ~LT %~plugin~list の`~size$ ] ⇒ ~RET %~plugin~list[ %index ] ◎ If index < plugins's size, then return plugins[index].
- ~RET ~NULL ◎ Return null.
- `length@pA 取得子~手続きは ⇒ ~RET コレに`関連な大域~obj$の`~PDF~viewer~plugin~obj~list$の`~size$ ◎ The PluginArray interface's length getter steps are to return this's relevant global object's PDF viewer plugin objects's size.
- `refresh()@pA ~method手続きは、 何もしない。 ◎ The PluginArray interface's refresh() method steps are to do nothing.
`MimeTypeArray$I ~interfaceの: ◎ ↓
- `~supportする~prop名$は ⇒ ~UAの`~PDF~viewerは~supportされるか$に応じて ⇒# ~T ならば `~PDF~viewer~MIME型~list$/ ~F ならば 空~list ◎ The MimeTypeArray interface supports named properties. If the user agent's PDF viewer supported is true, then they are the PDF viewer mime types. Otherwise, they are the empty list.
-
`namedItem(name)@mA ~method手続きは: ◎ The MimeTypeArray interface's namedItem(name) method steps are:
- コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$を成す ~EACH( `MimeType$I %~MIME型 ) に対し ⇒ ~IF[ %~MIME型 の`型$ ~EQ %name ] ⇒ ~RET %~MIME型 ◎ For each MimeType mimeType of this's relevant global object's PDF viewer mime type objects: if mimeType's type is name, then return mimeType.
- ~RET ~NULL ◎ Return null.
- `~supportする~prop~index$は ⇒ コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$の`~index群$ ◎ The MimeTypeArray interface supports indexed properties. The supported property indices are the indices of this's relevant global object's PDF viewer mime type objects.
-
`item(index)@mA ~method手続きは: ◎ The MimeTypeArray interface's item(index) method steps are:
- %~MIME型~list ~LET コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$ ◎ Let mimeTypes be this's relevant global object's PDF viewer mime type objects.
- ~IF[ %index ~LT %~MIME型~list の`~size$ ] ⇒ ~RET %~MIME型~list[ %index ] ◎ If index < mimeTypes's size, then return mimeTypes[index].
- ~RET ~NULL ◎ Return null.
- `length@mA 取得子~手続きは ⇒ ~RET コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$の`~size$ ◎ The MimeTypeArray interface's length getter steps are to return this's relevant global object's PDF viewer mime type objects's size.
各 `Plugin$I ~objは `名前@pG を有する — それは、 当の~objの作成-時に設定される。 ◎ Each Plugin object has a name, which is set when the object is created.
`Plugin$I ~interfaceの: ◎ ↓
- `name@mP 取得子~手続きは ⇒ ~RET コレの`名前$pG ◎ The Plugin interface's name getter steps are to return this's name.
- `description@mP 取得子~手続きは ⇒ ~RET `Portable Document Format^l ◎ The Plugin interface's description getter steps are to return "Portable Document Format".
- `filename@mP 取得子~手続きは ⇒ ~RET `internal-pdf-viewer^l ◎ The Plugin interface's filename getter steps are to return "internal-pdf-viewer".
- `~supportする~prop名$は ⇒ ~UAの`~PDF~viewerは~supportされるか$に応じて ⇒# ~T ならば `~PDF~viewer~MIME型~list$/ ~F ならば 空~list ◎ The Plugin interface supports named properties. If the user agent's PDF viewer supported is true, then they are the PDF viewer mime types. Otherwise, they are the empty list.
-
`namedItem(name)@mP ~method手続きは: ◎ The Plugin interface's namedItem(name) method steps are:
- コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$を成す ~EACH( `MimeType$I %~MIME型 ) に対し ⇒ ~IF[ %~MIME型 の`型$ ~EQ %name ] ⇒ ~RET %~MIME型 ◎ For each MimeType mimeType of this's relevant global object's PDF viewer mime type objects: if mimeType's type is name, then return mimeType.
- ~RET ~NULL ◎ Return null.
- `~supportする~prop~index$は ⇒ コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$の`~index群$ ◎ The Plugin interface supports indexed properties. The supported property indices are the indices of this's relevant global object's PDF viewer mime type objects.
-
`item(index)@mP ~method手続きは: ◎ The Plugin interface's item(index) method steps are:
- %~MIME型~list ~LET コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$ ◎ Let mimeTypes be this's relevant global object's PDF viewer mime type objects.
- ~IF[ %index ~LT %~MIME型~list の`~size$ ] ⇒ ~RET %~MIME型~list[ %index ] ◎ If index < mimeType's size, then return mimeTypes[index].
- ~RET ~NULL ◎ Return null.
- `length@mP 取得子~手続きは ⇒ ~RET コレに`関連な大域~obj$の`~PDF~viewer~MIME型~obj~list$の`~size$ ◎ The Plugin interface's length getter steps are to return this's relevant global object's PDF viewer mime type objects's size.
各 `MimeType$I ~objは `型@ を有する — それは、 当の~objの作成-時に設定される。 ◎ Each MimeType object has a type, which is set when the object is created.
`MimeType$I ~interfaceの: ◎ ↓
- `type@mM 取得子~手続きは ⇒ ~RET コレの`型$ ◎ The MimeType interface's type getter steps are to return this's type.
- `description@mM 取得子~手続きは ⇒ ~RET `Portable Document Format^l ◎ The MimeType interface's description getter steps are to return "Portable Document Format".
- `suffixes@mM 取得子~手続きは ⇒ ~RET `pdf^l ◎ The MimeType interface's suffixes getter steps are to return "pdf".
- `enabledPlugin@mM 取得子~手続きは ⇒ ~RET コレに`関連な大域~obj$の`~PDF~viewer~plugin~obj~list$[ 0 ] (すなわち,汎用な `PDF Viewer^l ) ◎ The MimeType interface's enabledPlugin getter steps are to return this's relevant global object's PDF viewer plugin objects[0] (i.e., the generic "PDF Viewer" one).