/[suikacvs]/markup/html/html5/spec-ja/workers-non-normative.ja.html.u8
Suika

Contents of /markup/html/html5/spec-ja/workers-non-normative.ja.html.u8

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.137 - (hide annotations) (download)
Thu Jul 16 06:21:14 2009 UTC (17 years ago) by wakaba
Branch: MAIN
Changes since 1.136: +70 -73 lines
make

1 wakaba 1.111 <!DOCTYPE html><html lang=en-US-x-hixie><meta charset=ascii><title>Web Workers</title><link href=http://www.whatwg.org/style/specification rel=stylesheet>
2     <link href=ja-style rel=stylesheet>
3     <link href=only-ja-style rel="stylesheet" title="Show only Japanese text" id=style-only-ja>
4     <link href=both-en-ja-style rel="alternate stylesheet" title="Show both English and Japanese texts" id=style-both-en-ja>
5     <script src=ja-script defer async></script><link href=http://www.whatwg.org/images/icon rel=icon><body class=draft>
6     <div class=head>
7     <p class="has-ja-translation" data-ja-hash="7c0cfd95ed2e5f66067c25a5e7fec67c"><span class=en-original lang=en><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG src=/images/logo></a></span><span class=ja-translation lang=ja><a class=logo href=http://www.whatwg.org/ rel=home><img lang=en alt=WHATWG
8     src=http://www.whatwg.org/images/logo></a></span></p>
9     <h1 class="no-ja-translation" data-ja-hash="6cb7eb9696d986359fa3a78c4b8e60dc"><span class=en-original lang=en>Web Workers</span></h1>
10 wakaba 1.137 <h2 class="no-num no-toc has-ja-translation" data-ja-hash="68d4b85951a44978f4d327b62fb8621b" data-ja-real-hash="04654f1994ec00c80d452c60c21f15b5" id=draft-recommendation-&mdash;-date:-01-jan-1901><span class=en-original lang=en>Draft Recommendation &mdash; 16 July 2009</span><span class=ja-translation lang=ja>勧告案<ins class=ja-note>の非公式和訳</ins> &mdash;
11     <ins class=ja-note>(原文出版日)</ins> 2009年7月16日</span></h2>
12 wakaba 1.111 <p class="has-ja-translation" data-ja-hash="5211c3fce4ddd8160d21446a73a092c1"><span class=en-original lang=en>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></span><span class=ja-translation lang=ja>みなさんにも作業にご参加いただけます。 <a
13     href=http://www.whatwg.org/mailing-list>作業部会の議論用メイリング・リストに参加してください。</a></span></p>
14     <p class="has-ja-translation" data-ja-hash="f8e7b0fcec0268c81579638290279e82"><span class=en-original lang=en><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</span><span class=ja-translation lang=ja><strong>Web デザイナーのみなさん!</strong> みなさんのための <a
15     href=http://blog.whatwg.org/faq/ lang=en>FAQ</a>、<a
16     href=http://forums.whatwg.org/>掲示板</a>、<a
17     href=http://www.whatwg.org/mailing-list#help>ヘルプ用メイリング・リスト</a>があります!
18    
19     </span><p>
20    
21     <!-- Japanese-translation-only notes -->
22     <ins class="ja-note cover-ja-note" lang=ja>
23     <p>この文書は、 WHATWG 仕様書の日本語訳です。 正式な仕様書は英語版だけであり、この日本語訳はあくまで参考としてご利用ください。
24    
25     <p lang=en>This document is a non-normative Japanese translation of the WHATWG specification. Only the original English version is normative and this Japanese translation is non‐normative.
26    
27     <p>日本語訳は段落をダブルクリックすると編集できます。<a href="http://suika.fam.cx/~wakaba/pbin/accounts/add">アカウントを作成</a>して <code>spec-ja</code> グループに参加してください。編集結果はおよそ3時間おきに反映されます。また、原文の変更には毎日自動的に追随しています。 (<a href=notes>詳細</a>)
28    
29     <p lang=en>You can edit Japanese text by double-clicking the paragraph you'd like to edit. <a href="http://suika.fam.cx/~wakaba/pbin/accounts/add">Create an account</a> and join the <code>spec-ja</code> group. Any additions of and modifications to Japanese text will be applied to the document within about three hours. Any changes to the original English specification will automatically be incorporated to the document every day. (<a href=notes>Details</a>)
30    
31     <p><a href="http://wiki.whatwg.org/wiki/Translations">他の翻訳のリスト</a>もご覧ください。
32    
33     <p lang=en>See also the list of <a href="http://wiki.whatwg.org/wiki/Translations">translations</a>.
34    
35     <p><button type=button onclick="
36     document.getElementById ('style-only-ja').disabled = false;
37     document.getElementById ('style-both-en-ja').disabled = true;
38     ">日本語訳だけ表示 <span lang=en>Show only Japanese translation</span></button>
39     <p><button type=button onclick="
40     document.getElementById ('style-only-ja').disabled = true;
41     document.getElementById ('style-both-en-ja').disabled = false;
42     ">英和対訳表示 <span lang=en>Show both English and Japanese texts</span></button>
43     </ins>
44    
45     <p><span><!-- dummy --></span></p>
46     <dl><dt class="has-ja-translation" data-ja-hash="87b044fafc6f01197a9a700e6fa28a69"><span class=en-original lang=en>This version:</span><span class=ja-translation lang=ja><ins class=ja-note>原文の</ins>この版</span></dt>
47     <dd class="no-ja-translation" data-ja-hash="b1b00adfdf359bf303bf8c64476f2e91"><span class=en-original lang=en><a href=http://www.whatwg.org/specs/web-workers/current-work/>http://whatwg.org/ww</a></span></dd>
48     <dt class="has-ja-translation" data-ja-hash="8866e8de2efa7275a5dc8e942c1613c2"><span class=en-original lang=en>Version history:</span><span class=ja-translation lang=ja><ins class=ja-note>原文の</ins>改版履歴:</span></dt>
49     <dd class="has-ja-translation" data-ja-hash="fc2cb84da44565f149b710ac5dfb38f2"><span class=en-original lang=en>Twitter messages (non-editorial changes only): <a href=http://twitter.com/WHATWG>http://twitter.com/WHATWG</a></span><span class=ja-translation lang=ja><span lang=en>Twitter</span> メッセージ (編集上の変更以外): <a
50     href=http://twitter.com/WHATWG>http://twitter.com/WHATWG</a></span></dd>
51     <dd class="has-ja-translation" data-ja-hash="3a0facbd53f73c0877af4c6485a783af"><span class=en-original lang=en>Commit-Watchers mailing list: <a href=http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org>http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org</a></span><span class=ja-translation lang=ja>Commit-Watchers メイリング・リスト: <a
52     href=http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org>http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org</a></span></dd>
53     <dd class="has-ja-translation" data-ja-hash="5e1dbca74cface6f0d0ea523340e6a89" data-ja-real-hash="a5d87a842e49eed08d894d0148296604"><span class=en-original lang=en>Interactive Web interface: <a href=http://html5.org/tools/web-workers-tracker>http://html5.org/tools/web-workers-tracker</a></span><span class=ja-translation lang=ja>対話的 <span lang=en>Web</span> 界面: <a href=http://html5.org/tools/web-workers-tracker>http://html5.org/tools/web-workers-tracker</a></span></dd>
54     <dd class="has-ja-translation" data-ja-hash="ea5cbdd06bfb529e4a1bcfeac9cfbd61" data-ja-real-hash="fabeffa34fbe319f499e2c5fd49a414f"><span class=en-original lang=en>Subversion interface: <a href=http://svn.whatwg.org/webworkers/>http://svn.whatwg.org/webworkers/</a></span><span class=ja-translation lang=ja><span lang=en>Subversion</span> 界面: <a href=http://svn.whatwg.org/webworkers/>http://svn.whatwg.org/webworkers/</a></span></dd>
55     <dt class="has-ja-translation" data-ja-hash="8468b55db22971120cb71091ece7839e"><span class=en-original lang=en>Issues:</span><span class=ja-translation lang=ja>問題:</span></dt>
56     <dd class="has-ja-translation" data-ja-hash="80e92f8cfebdeaa7dd35236fded506f7"><span class=en-original lang=en>To send feedback: <a href=http://www.whatwg.org/mailing-list>[email protected]</a></span><span class=ja-translation lang=ja>フィードバックの送信先: <a
57     href=http://www.whatwg.org/mailing-list>[email protected]</a></span></dd>
58     <dd class="has-ja-translation" data-ja-hash="31c70a584b8b4195d95daffc76736dea"><span class=en-original lang=en>To view and vote on feedback: <a href=http://www.whatwg.org/issues/>http://www.whatwg.org/issues/</a></span><span class=ja-translation lang=ja>フィードバックの閲覧・投票: <a
59     href=http://www.whatwg.org/issues/>http://www.whatwg.org/issues/</a></span></dd>
60     <dt class="has-ja-translation" data-ja-hash="aa8d072dc59504320cfa92381f541a5f"><span class=en-original lang=en>Editor:</span><span class=ja-translation lang=ja>編集者:</span></dt>
61     <dd class="no-ja-translation" data-ja-hash="220fb2ab7924ad62bc8567b8b9c5f0f8"><span class=en-original lang=en>Ian Hickson, Google, [email protected]</span></dd>
62     </dl><p class="copyright no-ja-translation" data-ja-hash="01887da059d5ef35df4e1cc221f80391"><span class=en-original lang=en>&copy; Copyright 2004-2008 Apple Computer, Inc.,
63     Mozilla Foundation, and Opera Software ASA.</span></p>
64     <p class="copyright no-ja-translation" data-ja-hash="5419c8afab07265f61a6768f2680776d"><span class=en-original lang=en>You are granted a license to use, reproduce
65     and create derivative works of this document.</span></p>
66     </div>
67    
68     <hr><h2 class="no-num no-toc has-ja-translation" data-ja-hash="e353dbe42c8654f33588d4da0b517469" id=abstract><span class=en-original lang=en>Abstract</span><span class=ja-translation lang=ja>概要</span></h2>
69    
70     <p class="has-ja-translation" data-ja-hash="a4f61aa99f0d87d5d87b6e07071a74da"><span class=en-original lang=en>This specification defines an API that allows Web application
71     authors to spawn background workers running scripts in parallel to
72     their main page. This allows for thread-like operation with
73     message-passing as the coordination mechanism.</span><span class=ja-translation lang=ja>この仕様書は、 Web アプリケーションで、主たる頁とは並列に、
74     背景労働者スクリプトを走らせるための API を定義します。
75     これにより、メッセージ・パッシングによるスレッド的操作を協調機構として利用できるようになります。</span></p>
76    
77    
78     <h2 class="no-num no-toc has-ja-translation" data-ja-hash="c9bfd146532700356f3ff5ea6b1bf72e" id=status><span class=en-original lang=en>Status of this document</span><span class=ja-translation lang=ja>この文書の状態</span></h2>
79    
80     <p class="has-ja-translation" data-ja-hash="910f4ff57cc374ba46a8fecb18849de5"><span class=en-original lang=en><strong>This is a work in progress!</strong> This document is
81     changing on a daily if not hourly basis in response to comments and
82     as a general part of its development process. Comments are very
83     welcome, please send them to <a href=mailto:[email protected]>[email protected]</a>. Thank
84     you.</span><span class=ja-translation lang=ja><strong>この文書は作業中です!</strong>
85     この文書は、コメントへの対応や通常の開発の過程として、
86     毎時毎分とは言い過ぎですが毎日のペースで変更されています。
87     コメントは非常に歓迎していますので、
88     <a href=mailto:[email protected]>[email protected]</a>
89     へお送りください。よろしくお願いします。</span></p>
90    
91     <p class="has-ja-translation" data-ja-hash="5bb9ea777b965ca8d962ba2b6f663d46"><span class=en-original lang=en>The current focus is in developing a first draft proposal.</span><span class=ja-translation lang=ja>現在の焦点は、第1案の開発です。</span></p>
92    
93     <p class="has-ja-translation" data-ja-hash="f0a0e89202a0b75b7cf2314905ae258d"><span class=en-original lang=en>Implementors should be aware that this specification is not
94     stable. <strong>Implementors who are not taking part in the
95     discussions are likely to find the specification changing out from
96     under them in incompatible ways.</strong> Vendors interested in
97     implementing this specification before it eventually reaches the
98     call for implementations should join the <a href=/mailing-list>WHATWG mailing list</a> and take part in the
99     discussions.</span><span class=ja-translation lang=ja>実装者は、この仕様書が安定していないことに注意するべきです。
100     <strong>実装者は議論に参加しておかないと、
101     仕様がその実装とは非互換に変更されてしまうかもしれません。</strong>
102     この仕様書がいずれ実装呼び掛けの段階に達するのよりも前にこの仕様を実装したい販売者は、
103     <a href=http://www.whatwg.org/mailing-list>WHATWG メイリング・リスト</a>に参加し、
104     議論に加わるべきです。</span></p>
105    
106     <p class="no-ja-translation" data-ja-hash="739dc8d532ab9ebbd8a5ba09015898cc"><span class=en-original lang=en>This specification is also being produced by the <a href=http://www.w3.org/2008/webapps/>W3C Web Apps WG</a>. The two
107     specifications are identical from the table of contents onwards.</span></p>
108    
109     <h2 class="no-num no-toc has-ja-translation" data-ja-hash="598b8ae10dfce818e73d3218daddbdae" id=contents><span class=en-original lang=en>Table of contents</span><span class=ja-translation lang=ja>目次
110     </span></h2>
111    
112     <!--begin-toc-->
113     <ol class=toc>
114     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="e8340d3e813afc18cffdf99dd3a546e3"><span class=en-original lang=en><a href=#introduction><span class=secno>1 </span>Introduction</a>
115     </span><ol>
116     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="1f928c91e5f5cc18f353953a9057c45e"><span class=en-original lang=en><a href=#scope><span class=secno>1.1 </span>Scope</a></span></li>
117     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="d9aa6a9a8b1af17de823ae3bc43e4cfa"><span class=en-original lang=en><a href=#tutorial><span class=secno>1.2 </span>Tutorial</a>
118     </span><ol>
119     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="4cc3646bed3970b883d0e3670dc846be"><span class=en-original lang=en><a href=#a-background-number-crunching-worker><span class=secno>1.2.1 </span>A background number-crunching worker</a></span></li>
120     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="d6b18f36ab82a61c165ccf567ef56b09"><span class=en-original lang=en><a href=#a-worker-for-updating-a-client-side-database><span class=secno>1.2.2 </span>A worker for updating a client-side database</a></span></li>
121     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="5d6e6c3a38a06321f9ff944393eb85c8"><span class=en-original lang=en><a href=#worker-used-for-background-i/o><span class=secno>1.2.3 </span>Worker used for background I/O</a></span></li>
122     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="00a7ff1b4687e65bfd54d8f34ac6c51b"><span class=en-original lang=en><a href=#shared-workers><span class=secno>1.2.4 </span>Shared workers</a></span></li>
123     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="0165a00ce6ba433bb49fb40d83e80072"><span class=en-original lang=en><a href=#delegation><span class=secno>1.2.5 </span>Delegation</a></span></li>
124     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="b073b1b0d03d81d0427c4bbb5a1056dc"><span class=en-original lang=en><a href=#providing-libraries><span class=secno>1.2.6 </span>Providing libraries</a></span></ol></ol></li>
125 wakaba 1.137 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="adf81d9200d74ed3c0f2c032a0531bf6"><span class=en-original lang=en><a href=#conformance-requirements><span class=secno>2 </span>Conformance requirements</a></span></li>
126     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="a1c15a6bd7d2c8e8e210054d4889f92c"><span class=en-original lang=en><a href=#dependencies><span class=secno>3 </span>Dependencies</a></span></li>
127     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="c2ee684e55d0793c98dbd5e1aa19ec26"><span class=en-original lang=en><a href=#terminology><span class=secno>4 </span>Terminology</a></span></li>
128     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="90db8c53fa9272fd3e0905738c3fef27"><span class=en-original lang=en><a href=#infrastructure><span class=secno>5 </span>Infrastructure</a>
129 wakaba 1.111 </span><ol>
130 wakaba 1.137 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="7aa55a2fe18afb838bb2ac782cd6cfa6"><span class=en-original lang=en><a href=#the-global-scope><span class=secno>5.1 </span>The global scope</a>
131 wakaba 1.111 </span><ol>
132 wakaba 1.137 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="46f6147c2de3e6c052e63e6ec83b3e45"><span class=en-original lang=en><a href=#the-workerglobalscope-abstract-interface><span class=secno>5.1.1 </span>The <code>WorkerGlobalScope</code> abstract interface</a></span></li>
133     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="492ad3abb9db9a3221bf6cc7b1abdaaa"><span class=en-original lang=en><a href=#dedicated-workers-and-the-dedicatedworkerglobalscope-interface><span class=secno>5.1.2 </span>Dedicated workers and the <code>DedicatedWorkerGlobalScope</code> interface</a></span></li>
134     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="95f889b78def650be99d51e84b173470"><span class=en-original lang=en><a href=#shared-workers-and-the-sharedworkerglobalscope-inteface><span class=secno>5.1.3 </span>Shared workers and the <code>SharedWorkerGlobalScope</code> inteface</a></span></ol></li>
135     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="bb0fca736b849284afc3a14983332ec0"><span class=en-original lang=en><a href=#base-urls-and-origins-of-workers><span class=secno>5.2 </span>Base URLs and origins of workers</a></span></li>
136     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="dd0e9702c20f56508204be6f248a9a8d"><span class=en-original lang=en><a href=#decoding-scripts><span class=secno>5.3 </span>Decoding scripts</a></span></li>
137     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="68bc9ebb8b9b320f6a6ba0c2f0c6c878"><span class=en-original lang=en><a href=#the-event-loop><span class=secno>5.4 </span>The event loop</a></span></li>
138     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="3b8e4c88270940c888a0f6fcb0654270"><span class=en-original lang=en><a href="#the-worker's-lifetime"><span class=secno>5.5 </span>The worker's lifetime</a></span></li>
139     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="b249480b3295562d73fadbe2c4b3dce1"><span class=en-original lang=en><a href=#processing-model><span class=secno>5.6 </span>Processing model</a></span></li>
140     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="42848c7e6e02ca14d4b7de0d13a19579"><span class=en-original lang=en><a href=#runtime-script-errors><span class=secno>5.7 </span>Runtime script errors</a></span></li>
141     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="4e0e5bb1be45ed1c9282985886b678fe"><span class=en-original lang=en><a href=#creating-workers><span class=secno>5.8 </span>Creating workers</a>
142 wakaba 1.111 </span><ol>
143 wakaba 1.137 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="0efef6285192e15713debb145b084f66"><span class=en-original lang=en><a href=#the-abstractworker-abstract-interface><span class=secno>5.8.1 </span>The <code>AbstractWorker</code> abstract interface</a></span></li>
144     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="58fd211b1b648cd835365fbbc3daa43c"><span class=en-original lang=en><a href=#dedicated-workers-and-the-worker-interface><span class=secno>5.8.2 </span>Dedicated workers and the <code>Worker</code> interface</a></span></li>
145     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="5545c900950b7972fedc4b366b68b64d"><span class=en-original lang=en><a href=#shared-workers-and-the-sharedworker-interface><span class=secno>5.8.3 </span>Shared workers and the <code>SharedWorker</code> interface</a></span></ol></ol></li>
146     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="ddacb0e4b187511a1fe46568e93e8e05"><span class=en-original lang=en><a href=#apis-available-to-workers><span class=secno>6 </span>APIs available to workers</a>
147 wakaba 1.111 </span><ol>
148 wakaba 1.137 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="63b05132d86cb92fc38fcf83eac8f6f4"><span class=en-original lang=en><a href=#importing-scripts-and-libraries><span class=secno>6.1 </span>Importing scripts and libraries</a></span></li>
149     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="239c576104cb66073c5dd8d63538a3e8"><span class=en-original lang=en><a href=#the-navigator-object><span class=secno>6.2 </span>The <code title=worker-Navigator>Navigator</code> object</a></span></li>
150     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="ed3ff91f6ed99102561201f1eda36c7a"><span class=en-original lang=en><a href=#apis-defined-in-other-specifications><span class=secno>6.3 </span>APIs defined in other specifications</a></span></li>
151     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="f5e47c9ed7d2f9bfa06b139c6f0191a7"><span class=en-original lang=en><a href=#interface-objects-and-constructors><span class=secno>6.4 </span>Interface objects and constructors</a></span></li>
152     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="ccbc4f96150f6003715611fea4c73fea"><span class=en-original lang=en><a href=#worker-locations><span class=secno>6.5 </span>Worker locations</a></span></ol></li>
153 wakaba 1.111 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="721ff2a311123f40dbb5fe64d58f47d3"><span class=en-original lang=en><a class=no-num href=#references>References</a></span></li>
154     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="e3edbd0e5dae2337ce9018ac56f33463"><span class=en-original lang=en><a class=no-num href=#acknowledgements>Acknowledgements</a></span></ol>
155     <!--end-toc-->
156     <hr><h2 id=introduction class="has-ja-translation" data-ja-hash="0b79795d3efc95b9976c7c5b933afce2"><span class=en-original lang=en><span class=secno>1 </span>Introduction</span><span class=ja-translation lang=ja><span class=secno>1 </span>はじめに</span></h2>
157    
158     <h3 id=scope class="has-ja-translation" data-ja-hash="5d113f2038d289f391614c39043629e8"><span class=en-original lang=en><span class=secno>1.1 </span>Scope</span><span class=ja-translation lang=ja><span class=secno>1.1 </span>適用範囲</span></h3>
159    
160 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
161 wakaba 1.111
162     <p class="no-ja-translation" data-ja-hash="2f78689edd39ccffc1a21b979c376f45"><span class=en-original lang=en>This specification defines an API for running scripts in the
163     background independently of any user interface scripts.</span></p>
164    
165     <p class="no-ja-translation" data-ja-hash="f41b6868a33d2c4d265857efdf426694"><span class=en-original lang=en>This allows for long-running scripts that are not interrupted by
166     scripts that respond to clicks or other user interactions, and
167     allows long tasks to be executed without yielding to keep the page
168     responsive.</span></p>
169    
170     <p class="no-ja-translation" data-ja-hash="52e3c8127ee80a92ae3709986b8f2450"><span class=en-original lang=en>Workers (as these background scripts are called herein) are
171     relatively heavy-weight, and are not intended to be used in large
172     numbers. For example, it would be inappropriate to launch one worker
173     for each pixel of a four megapixel image. The examples below show
174     some appropriate uses of workers.</span></p>
175    
176     <p class="no-ja-translation" data-ja-hash="497e60abbf38e141b92f7017f71dc302"><span class=en-original lang=en>Generally, workers are expected to be long-lived, have a high
177     start-up performance cost, and a high per-instance memory cost.</span></p>
178    
179    
180     <h3 id=tutorial class="has-ja-translation" data-ja-hash="368fe771261fcb18f7988833c9294a20"><span class=en-original lang=en><span class=secno>1.2 </span>Tutorial</span><span class=ja-translation lang=ja><span class=secno>1.2 </span>解説</span></h3>
181    
182 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
183 wakaba 1.111
184     <p class="has-ja-translation" data-ja-hash="c98bec741e84294c9feae0d581f897b6"><span class=en-original lang=en>There are a variety of uses that workers can be put to. The
185     following subsections show various examples of this use.</span><span class=ja-translation lang=ja>労働者は色々なことに使えます。次の各節では、色々な使い方の例を示します。</span></p>
186    
187     <h4 id=a-background-number-crunching-worker class="has-ja-translation" data-ja-hash="03100d1ee403be709f47c37e6b55c758"><span class=en-original lang=en><span class=secno>1.2.1 </span>A background number-crunching worker</span><span class=ja-translation lang=ja><span class=secno>1.2.1 </span>数値処理背景労働者</span></h4>
188    
189 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
190 wakaba 1.111
191     <p class="has-ja-translation" data-ja-hash="6656ef1c2fd445878e165388d704a723"><span class=en-original lang=en>The simplest use of workers is for performing a computationally
192     expensive task without interrupting the user interface.</span><span class=ja-translation lang=ja>労働者の一番単純な用法は、計算的に高価な仕事を利用者界面を中断させずに実行するというものです。</span></p>
193    
194     <p class="has-ja-translation" data-ja-hash="14941a1ddb566828a9181bcecf3a815a"><span class=en-original lang=en>In this example, the main document spawns a worker to
195     (na&iuml;vely) compute prime numbers, and progressively displays the
196     most recently found prime number.</span><span class=ja-translation lang=ja>この例では、主たる文書が労働者を作って素数を (素朴な方法で) 計算させ、
197     新しく見つかった素数を順番に表示してゆきます。</span></p>
198    
199     <p class="has-ja-translation" data-ja-hash="97bcf42c4070cbcef605cfa277d832fb"><span class=en-original lang=en>The main page is as follows:</span><span class=ja-translation lang=ja>主たる頁は次の通りです。</span></p>
200    
201     <pre class="no-ja-translation" data-ja-hash="45b861d46157f155d38040db723bafd1"><span class=en-original lang=en>&lt;!DOCTYPE HTML&gt;
202     &lt;html&gt;
203     &lt;head&gt;
204     &lt;title&gt;Worker example: One-core computation&lt;/title&gt;
205     &lt;/head&gt;
206     &lt;body&gt;
207     &lt;p&gt;The highest prime number discovered so far is: &lt;output id="result"&gt;&lt;/output&gt;&lt;/p&gt;
208     &lt;script&gt;
209     var worker = new Worker('worker.js');
210     worker.onmessage = function (event) {
211     document.getElementById('result').textContent = event.data;
212     };
213     &lt;/script&gt;
214     &lt;/body&gt;
215     &lt;/html&gt;</span></pre>
216    
217     <p class="no-ja-translation" data-ja-hash="64b5d9bd2853f85edab220de5a199787"><span class=en-original lang=en>The <code title=dom-Worker><a href=#dom-worker>Worker()</a></code> constructor call
218     creates a worker and returns a <code><a href=#worker>Worker</a></code> object
219     representing that worker, which is used to communicate with the
220     worker. That object's <code title=handler-Worker-onmessage><a href=#handler-worker-onmessage>onmessage</a></code> event handler
221     attribute allows the code to receive messages from the worker.</span></p>
222    
223     <p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:</span><span class=ja-translation lang=ja>労働者自体は次の通りです。</span></p>
224    
225     <pre class="no-ja-translation" data-ja-hash="35390f08d92125ad461fd6bb5969cb0c"><span class=en-original lang=en>var n = 1;
226     search: while (true) {
227     n += 1;
228     for (var i = 2; i &lt;= Math.sqrt(n); i += 1)
229     if (n % i == 0)
230     continue search;
231     // found a prime!
232     postMessage(n);
233     }</span></pre>
234    
235     <p class="no-ja-translation" data-ja-hash="48faeab09946f0578b4b421f4cf0a5db"><span class=en-original lang=en>The bulk of this code is simply an unoptimized search for a prime
236     number. To send a message back to the page, the <code title=dom-DedicatedWorkerGlobalScope-postMessage><a href=#dom-dedicatedworkerglobalscope-postmessage>postMessage()</a></code>
237     method is used to post a message when a prime is found.</span></p>
238    
239     <p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="19ee793c62fc7bda7447ccda3a91b44e"><span class=en-original lang=en><a href=http://www.whatwg.org/demos/workers/primes/page.html>View this example online</a>.</span><span class=ja-translation lang=ja><a href=http://www.whatwg.org/demos/workers/primes/page.html>この例をオンラインで表示する</a>。</span></p>
240    
241    
242    
243     <h4 id=a-worker-for-updating-a-client-side-database class="has-ja-translation" data-ja-hash="be08cb921deb5e88f7dcb3edbd9f0274"><span class=en-original lang=en><span class=secno>1.2.2 </span>A worker for updating a client-side database</span><span class=ja-translation lang=ja><span class=secno>1.2.2 </span>クライアント側データベースの更新のための労働者</span></h4>
244    
245 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
246 wakaba 1.111
247     <p class="no-ja-translation" data-ja-hash="e8e4acfb27dabd6fd72aa5a4af7b7d25"><span class=en-original lang=en>In this example, the main document spawns a worker whose only
248     task is to listen for notifications from the server, and, when
249     appropriate, either add or remove data from the client-side
250     database.</span></p>
251    
252     <p class="has-ja-translation" data-ja-hash="88e890f11b614dc40f4d2453a66ec94f"><span class=en-original lang=en>Since no communication occurs between the worker and the main
253     page, the main page can start the worker by just doing:</span><span class=ja-translation lang=ja>労働者と主たる頁の間に通信は発生しませんので、
254     主たる頁は単に次のようにするだけで労働者を開始できます。</span></p>
255    
256     <pre class="no-ja-translation" data-ja-hash="c87d2a32789642a7a7353364dffa7c04"><span class=en-original lang=en>&lt;script&gt;
257     new Worker('worker.js');
258     &lt;/script&gt;</span></pre>
259    
260     <p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:</span><span class=ja-translation lang=ja>労働者自体は次の通りです。</span></p>
261    
262     <pre class="no-ja-translation" data-ja-hash="cfd35229b68e597b6a21322a3e3c1aea"><span class=en-original lang=en>var server = new WebSocket('ws://whatwg.org/database');
263     var database = openDatabase('demobase', '1.0', 'Demo Database', 10240);
264     server.onmessage = function (event) {
265     // data is in the format "command key value"
266     var data = event.data.split(' ');
267     switch (data[0]) {
268     case '+':
269     database.transaction(function(tx) {
270     tx.executeSql('INSERT INTO pairs (key, value) VALUES (?, ?)', data[1], data[2]);
271     });
272     case '-':
273     database.transaction(function(tx) {
274     tx.executeSql('DELETE FROM pairs WHERE key=? AND value=?', data[1], data[2]);
275     });
276     }
277     };</span></pre>
278    
279     <p class="no-ja-translation" data-ja-hash="df7990f8fb4ac6850b65c14c08446f5c"><span class=en-original lang=en>This connects to the server using the <code>WebSocket</code>
280     mechanism and opens the local database (which, we presume, has been
281     created earlier). The worker then just listens for messages from the
282     server and acts on them as appropriate, forever (or until the main
283     page is closed).</span></p>
284    
285     <p class="no-ja-translation" data-ja-hash="f0d091179997558acbbf256bd7379b3d"><span class=en-original lang=en><a href=http://www.whatwg.org/demos/workers/database-updater/page.html>View
286     this example online</a>. (This example will not actually function,
287     since the server does not actually exist and the database is not
288     created by this sample code.)</span></p>
289    
290    
291    
292     <h4 id=worker-used-for-background-i/o class="no-ja-translation" data-ja-hash="26a2e24494eb4f94591467b79f68f6f2"><span class=en-original lang=en><span class=secno>1.2.3 </span>Worker used for background I/O</span></h4>
293    
294 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
295 wakaba 1.111
296     <p class="has-ja-translation" data-ja-hash="eb288220a303d56acd4e151bca42fe6e"><span class=en-original lang=en>In this example, the main document uses two workers, one for
297     fetching stock updates for at regular intervals, and one for
298     fetching performing search queries that the user requests.</span><span class=ja-translation lang=ja>この例では、主たる文書は2つの労働者を使います。
299     1つは一定間隔で株価の更新を取得するためのもので、もう1つは利用者の要求した検索の照会を行う取得のためのものです。</span></p>
300    
301     <p class="has-ja-translation" data-ja-hash="97bcf42c4070cbcef605cfa277d832fb"><span class=en-original lang=en>The main page is as follows:</span><span class=ja-translation lang=ja>主たる頁は次の通りです。</span></p>
302    
303     <pre class="no-ja-translation" data-ja-hash="a4e743797f3cad5ba0d0016878e0e28c"><span class=en-original lang=en>&lt;!DOCTYPE HTML&gt;
304     &lt;html&gt;
305     &lt;head&gt;
306     &lt;title&gt;Worker example: Stock ticker&lt;/title&gt;
307     &lt;script&gt;
308     // TICKER
309     var symbol = 'GOOG'; // default symbol to watch
310     var ticker = new Worker('ticker.js');
311    
312     // SEARCHER
313     var searcher = new Worker('searcher.js');
314     function search(query) {
315     searcher.postMessage(query);
316     }
317    
318     // SYMBOL SELECTION UI
319     function select(newSymbol) {
320     symbol = newSymbol;
321     ticker.postMessage(symbol);
322     }
323     &lt;/script&gt;
324     &lt;/head&gt;
325     &lt;body onload="search('')"&gt;
326     &lt;p&gt;&lt;output id="symbol"&gt;&lt;/output&gt; &lt;output id="value"&gt;&lt;/output&gt;&lt;/p&gt;
327     &lt;script&gt;
328     ticker.onmessage = function (event) {
329     var data = event.data.split(' ');
330     document.getElementById('symbol').textContent = data[0];
331     document.getElementById('value').textContent = data[1];
332     };
333     ticker.postMessage(symbol);
334     &lt;/script&gt;
335     &lt;p&gt;&lt;label&gt;Search: &lt;input type="text" autofocus oninput="search(this.value)"&gt;&lt;/label&gt;&lt;/p&gt;
336     &lt;ul id="results"&gt;&lt;/ul&gt;
337     &lt;script&gt;
338     searcher.onmessage = function (event) {
339     var data = event.data.split(' ');
340     var results = document.getElementById('results');
341     while (results.hasChildNodes()) // clear previous results
342     results.removeChild(results.firstChild);
343     for (var i = 0; i &lt; data.length; i += 1) {
344     // add a list item with a button for each result
345     var li = document.createElement('li');
346     var button = document.createElement('button');
347     button.value = data[i];
348     button.type = 'button';
349     button.onclick = function () { select(this.value); };
350     button.textContent = data[i];
351     li.appendChild(button);
352     results.appendChild(li);
353     }
354     };
355     &lt;/script&gt;
356     &lt;p&gt;(The data in this example is not real. Try searching for "Google" or "Apple".)&lt;/p&gt;
357     &lt;/body&gt;
358     &lt;/html&gt;</span></pre>
359    
360     <p class="has-ja-translation" data-ja-hash="4cc7e781e44db82f8bd32020954bb94a"><span class=en-original lang=en>The two workers use a common library for performing the actual
361     network calls. This library is as follows:</span><span class=ja-translation lang=ja>両労働者は実際のネットワークの呼び出しを行う共通のライブラリーを使います。
362     このライブラリーは次の通りです。</span></p>
363    
364     <pre class="no-ja-translation" data-ja-hash="764d750a19834bf904d276466724339c"><span class=en-original lang=en>function get(url) {
365     try {
366     var xhr = new XMLHttpRequest();
367     xhr.open('GET', url, false);
368     xhr.send();
369     return xhr.responseText;
370     } catch (e) {
371     return ''; // turn all errors into empty results
372     }
373     }</span></pre>
374    
375     <p class="has-ja-translation" data-ja-hash="ee10423864c33d68e8676bf88cb75046"><span class=en-original lang=en>The stock updater worker is as follows:</span><span class=ja-translation lang=ja>株価更新者の労働者は次の通りです。</span></p>
376    
377     <pre class="no-ja-translation" data-ja-hash="66ef47eaf421ea8066871b71807859be"><span class=en-original lang=en>importScripts('io.js');
378     var timer;
379     var symbol;
380     function update() {
381     postMessage(symbol + ' ' + get('stock.cgi?' + symbol));
382     timer = setTimeout(update, 10000);
383     }
384     onmessage = function (event) {
385     if (timer)
386     clearTimeout(timer);
387     symbol = event.data;
388     update();
389     };</span></pre>
390    
391     <p class="has-ja-translation" data-ja-hash="aa6a78ceb7b91cdf90925cc36c6c6676"><span class=en-original lang=en>The search query worker is as follows:</span><span class=ja-translation lang=ja>検索の照会の労働者は次の通りです。</span></p>
392    
393     <pre class="no-ja-translation" data-ja-hash="ac0353e2a69ae5ffdc861cca404ef9f0"><span class=en-original lang=en>importScripts('io.js');
394     onmessage = function (event) {
395     postMessage(get('search.cgi?' + event.data));
396     };</span></pre>
397    
398     <p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="5855651f68b535b77cb2b82bed593472"><span class=en-original lang=en><a href=http://www.whatwg.org/demos/workers/stocks/page.html>View this example online</a>.</span><span class=ja-translation lang=ja><a href=http://www.whatwg.org/demos/workers/stocks/page.html>この例をオンラインで表示する</a>。</span></p>
399    
400    
401     <h4 id=shared-workers class="has-ja-translation" data-ja-hash="634755c2f50b08b49a82f30428b1a961"><span class=en-original lang=en><span class=secno>1.2.4 </span>Shared workers</span><span class=ja-translation lang=ja><span class=secno>1.2.4 </span>共有労働者</span></h4>
402    
403 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
404 wakaba 1.111
405     <p class="no-ja-translation" data-ja-hash="2ec2b66f1e8130c8e0552d348a633841"><span class=en-original lang=en>In this example, multiple windows (viewers) can be opened that
406     are all viewing the same map. All the windows share the same map
407     information, with a single worker coordinating all the viewers. Each
408     viewer can move around independently, but if they set any data on
409     the map, all the viewers are updated.</span></p>
410    
411     <p class="has-ja-translation" data-ja-hash="2bf6969d7d27e56c707ae9970fdd476f"><span class=en-original lang=en>The main page isn't interesting, it merely provides a way to open
412     the viewers:</span><span class=ja-translation lang=ja>主たる頁は特に何もなく、単に表示器を開くためだけのものです。</span></p>
413    
414     <pre class="no-ja-translation" data-ja-hash="e27ef9096d7661be60af654b55813524"><span class=en-original lang=en>&lt;!DOCTYPE HTML&gt;
415     &lt;html&gt;
416     &lt;head&gt;
417     &lt;title&gt;Workers example: Multiviewer&lt;/title&gt;
418     &lt;script&gt;
419     function openViewer() {
420     window.open('viewer.html');
421     }
422     &lt;/script&gt;
423     &lt;/head&gt;
424     &lt;body&gt;
425     &lt;p&gt;&lt;button type=button onclick="openViewer()"&gt;Open a new
426     viewer&lt;/button&gt;&lt;/p&gt;
427     &lt;p&gt;Each viewer opens in a new window. You can have as many viewers
428     as you like, they all view the same data.&lt;/p&gt;
429     &lt;/body&gt;
430     &lt;/html&gt;</span></pre>
431    
432     <p class="has-ja-translation" data-ja-hash="cee02afe1e87e7182f5219ccf54757ca"><span class=en-original lang=en>The viewer is more involved:</span><span class=ja-translation lang=ja>表示器はもっと色々しています。</span></p>
433    
434     <pre class="no-ja-translation" data-ja-hash="6f90bb09ab3ecf0dc089f72f0f7bf32b"><span class=en-original lang=en>&lt;!DOCTYPE HTML&gt;
435     &lt;html&gt;
436     &lt;head&gt;
437     &lt;title&gt;Workers example: Multiviewer viewer&lt;/title&gt;
438     &lt;script&gt;
439     var worker = new SharedWorker('worker.js', 'core');
440    
441     // CONFIGURATION
442     function configure(event) {
443     if (event.data.substr(0, 4) != 'cfg ') return;
444     var name = event.data.substr(4).split(' ', 1);
445     // update display to mention our name is name
446     document.getElementsByTagName('h1')[0].textContent += ' ' + name;
447     // no longer need this listener
448     worker.port.removeEventListener('message', configure, false);
449     }
450     worker.port.addEventListener('message', configure, false);
451    
452     // MAP
453     function paintMap(event) {
454     if (event.data.substr(0, 4) != 'map ') return;
455     var data = event.data.substr(4).split(',');
456     // display tiles data[0] .. data[8]
457     var canvas = document.getElementById('map');
458     var context = canvas.getContext('2d');
459     for (var y = 0; y &lt; 3; y += 1) {
460     for (var x = 0; x &lt; 3; x += 1) {
461     var tile = data[y * 3 + x];
462     if (tile == '0')
463     context.fillStyle = 'green';
464     else
465     context.fillStyle = 'maroon';
466     fillRect(x * 50, y * 50, 50, 50);
467     }
468     }
469     }
470     worker.port.addEventListener('message', paintMap, false);
471    
472     // PUBLIC CHAT
473     function updatePublicChat(event) {
474     if (event.data.substr(0, 4) != 'txt ') return;
475     var name = event.data.substr(4).split(' ', 1);
476     var message = event.data.substr(4 + length(name) + 1);
477     // display "&lt;name&gt; message" in public chat
478     var dialog = document.getElementById('public');
479     var dt = document.createElement('dt');
480     dt.textContent = name;
481     dialog.appendChild(dt);
482     var dd = document.createElement('dd');
483     dd.textContent = message;
484     dialog.appendChild(dd);
485     }
486     worker.port.addEventListener('message', updatePublicChat, false);
487    
488     // PRIVATE CHAT
489     function startPrivateChat(event) {
490     if (event.data.substr(0, 4) != 'msg ') return;
491     var name = event.data.substr(4).split(' ', 1);
492     var port = event.ports[0];
493     // display a private chat UI
494     var ul = document.getElementById('private');
495     var li = document.createElement('li');
496     var h3 = document.createElement('h3');
497     h3.textContent = 'Private chat with ' + name;
498     li.appendChild(h3);
499     var dialog = document.createElement('dialog');
500     var addMessage = function(name, message) {
501     var dt = document.createElement('dt');
502     dt.textContent = name;
503     dialog.appendChild(dt);
504     var dd = document.createElement('dd');
505     dd.textContent = message;
506     dialog.appendChild(dd);
507     };
508     port.onmessage = function (event) {
509     addMessage(name, event.data);
510     };
511     li.appendChild(dialog);
512     var form = document.createElement('form');
513     var p = document.createElement('p');
514     var input = document.createElement('input');
515     input.size = 50;
516     p.appendChild(input);
517     p.appendChild(document.createTextNode(' '));
518     var button = document.createElement('button');
519     button.textContent = 'Post';
520     p.appendChild(button);
521     form.onsubmit = function () {
522     port.postMessage(input.value);
523     addMessage('me', input.value);
524     input.value = '';
525     return false;
526     };
527     form.appendChild(p);
528     li.appendChild(form);
529     }
530     worker.port.addEventListener('message', startPrivateChat, false);
531     &lt;/script&gt;
532     &lt;/head&gt;
533     &lt;body&gt;
534     &lt;h1&gt;Viewer&lt;/h1&gt;
535     &lt;h2&gt;Map&lt;/h2&gt;
536     &lt;p&gt;&lt;canvas id="map" height=150 width=150&gt;&lt;/canvas&gt;&lt;/p&gt;
537     &lt;p&gt;
538     &lt;button type=button onclick="worker.port.postMessage('mov left')"&gt;Left&lt;/button&gt;
539     &lt;button type=button onclick="worker.port.postMessage('mov up')"&gt;Up&lt;/button&gt;
540     &lt;button type=button onclick="worker.port.postMessage('mov down')"&gt;Down&lt;/button&gt;
541     &lt;button type=button onclick="worker.port.postMessage('mov right')"&gt;Right&lt;/button&gt;
542     &lt;button type=button onclick="worker.port.postMessage('set 0')"&gt;Set 0&lt;/button&gt;
543     &lt;button type=button onclick="worker.port.postMessage('set 1')"&gt;Set 1&lt;/button&gt;
544     &lt;/p&gt;
545     &lt;h2&gt;Public Chat&lt;/h2&gt;
546     &lt;dialog id="public"&gt;&lt;/dialog&gt;
547     &lt;form onsubmit="worker.port.postMessage('txt ' + message.value); message.value = ''; return false;"&gt;
548     &lt;p&gt;
549     &lt;input type="text" name="message" size="50"&gt;
550     &lt;button&gt;Post&lt;/button&gt;
551     &lt;/p&gt;
552     &lt;/form&gt;
553     &lt;h2&gt;Private Chat&lt;/h2&gt;
554     &lt;ul id="private"&gt;&lt;/ul&gt;
555     &lt;/body&gt;
556     &lt;/html&gt;
557     </span></pre>
558    
559     <p class="has-ja-translation" data-ja-hash="397850dab731150b72d5f0276dab0081"><span class=en-original lang=en>There are several key things worth noting about the way the
560     viewer is written.</span><span class=ja-translation lang=ja>表示器の書き方についていくつか注意したい重要な点があります。</span></p>
561    
562     <p class="has-ja-translation" data-ja-hash="8bc9c1f9e0e102128838ea8c31c51306"><span class=en-original lang=en><strong>Multiple listeners</strong>. Instead of a single message
563     processing function, the code here attaches multiple event
564     listeners, each one performing a quick check to see if it is
565     relevant for the message. In this example it doesn't make much
566     difference, but if multiple authors wanted to collaborate using a
567     single port to communicate with a worker, it would allow for
568     independent code instead of changes having to all be made to a
569     single event handling function.</span><span class=ja-translation lang=ja><strong>複数の聴取器</strong>。この符号では、メッセージ処理関数を1つ用意する代わりに、
570     複数の事象聴取器を付与し、それぞれが、それがメッセージに関連するかどうかを見るためにさらりと検査を行っています。
571     この例では大きな違いにはなりませんが、複数の著者が労働者と通信するために1つのポートを使って協調したい場合には、
572     独立した符号にできるので変更がある度に1つの事象取扱関数をいじらざるを得なくて済みます。</span></p>
573    
574     <p class="no-ja-translation" data-ja-hash="ce2f17c1c25589a0d4507c6fa9c1f532"><span class=en-original lang=en>Registering event listeners in this way also allows you to
575     unregister specific listeners when you are done with them, as is
576     done with the <code title="">configure()</code> method in this
577     example.</span></p>
578    
579     <p class="has-ja-translation" data-ja-hash="4eb1fa2095f65662225da4c52db274f1"><span class=en-original lang=en>Finally, the worker:</span><span class=ja-translation lang=ja>最後に、労働者は次のようになります。</span></p>
580    
581     <pre class="no-ja-translation" data-ja-hash="2a6833ffcfe9252a21a8582ad69a4adf"><span class=en-original lang=en>
582     var nextName = 0;
583     function getNextName() {
584     // this could use more friendly names
585     // but for now just return a number
586     return nextName++;
587     }
588    
589     var map = [
590     [0, 0, 0, 0, 0, 0, 0],
591     [1, 1, 0, 1, 0, 1, 1],
592     [0, 1, 0, 1, 0, 0, 0],
593     [0, 1, 0, 1, 0, 1, 1],
594     [0, 0, 0, 1, 0, 0, 0],
595     [1, 0, 0, 1, 1, 1, 1],
596     [1, 1, 0, 1, 1, 0, 1],
597     ];
598    
599     function wrapX(x) {
600     if (x &lt; 0) return wrapX(x + map[0].length);
601     if (x &gt;= map[0].length) return wrapX(x - map[0].length);
602     return x;
603     }
604    
605     function wrapY(y) {
606     if (y &lt; 0) return wrapY(y + map.length);
607     if (y &gt;= map[0].length) return wrapY(y - map.length);
608     return y;
609     }
610    
611     function sendMapData(callback) {
612     var data = '';
613     for (var y = viewer.y-1; y &lt;= viewer.y+1; y += 1) {
614     for (var x = viewer.x-1; x &lt;= viewer.x+1; x += 1) {
615     if (data != '')
616     data += ',';
617     data += map[y][x];
618     }
619     }
620     callback('map ' + data);
621     }
622    
623     var viewers = {};
624     onconnect = function (event) {
625     event.ports[0]._name = getNextName();
626     event.ports[0]._data = { port: event.port, x: 0, y: 0, };
627     viewers[event.ports[0]._name] = event.port._data;
628     event.ports[0].postMessage('cfg ' + name);
629     event.ports[0].onmessage = getMessage;
630     sendMapData(event.ports[0].postMessage);
631     };
632    
633     function getMessage(event) {
634     switch (event.data.substr(0, 4)) {
635     case 'mov ':
636     var direction = event.data.substr(4);
637     var dx = 0;
638     var dy = 0;
639     switch (direction) {
640     case 'up': dy = -1; break;
641     case 'down': dy = 1; break;
642     case 'left': dx = -1; break;
643     case 'right': dx = 1; break;
644     }
645     event.target._data.x = wrapX(event.target._data.x + dx);
646     event.target._data.y = wrapY(event.target._data.y + dy);
647     sendMapData(event.target.postMessage);
648     break;
649     case 'set ':
650     var value = event.data.substr(4);
651     map[event.target._data.y][event.target._data.x] = value;
652     for (var viewer in viewers)
653     sendMapData(viewers[viewer].port.postMessage);
654     break;
655     case 'txt ':
656     var name = event.target._name;
657     var message = event.data.substr(4);
658     for (var viewer in viewers)
659     viewers[viewer].port.postMessage('txt ' + name + ' ' + message);
660     break;
661     case 'msg ':
662     var party1 = event._data;
663     var party2 = viewers[event.data.substr(4).split(' ', 1)];
664     if (party2) {
665     var channel = new MessageChannel();
666     party1.port.postMessage('msg ' + party2.name, [channel.port1]);
667     party2.port.postMessage('msg ' + party1.name, [channel.port2]);
668     }
669     break;
670     }
671     }</span></pre>
672    
673     <p class="no-ja-translation" data-ja-hash="80f59a8dae1df6b25c537e5041683f5d"><span class=en-original lang=en><strong>Connecting to multiple pages</strong>. The script uses
674     the <code title=handler-SharedWorkerGlobalScope-onconnect><a href=#handler-sharedworkerglobalscope-onconnect>onconnect</a></code>
675     event listener to listen for multiple connections.</span></p>
676    
677     <p class="has-ja-translation" data-ja-hash="5ce666b6338718b46fb0dee22dbea88c"><span class=en-original lang=en><strong>Direct channels</strong>. When the worker receives a
678     "msg" message from one viewer naming another viewer, it sets up a
679     direct connection between the two, so that the two viewers can
680     communicate directly without the worker having to proxy all the
681     messages.</span><span class=ja-translation lang=ja><strong>直接通信路</strong>。労働者がある閲覧器から他の閲覧器を名指した「msg」メッセージを受信した時は、
682     両者間の直接の接続を設定し、労働者がすべてのメッセージを仲介せずとも両閲覧器が直接通信できるようにします。</span></p>
683    
684     <p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="8d892cfe0423f9a15e275e47c6b45600"><span class=en-original lang=en><a href=http://www.whatwg.org/demos/workers/multiviewer/page.html>View this example online</a>.</span><span class=ja-translation lang=ja><a href=http://www.whatwg.org/demos/workers/multiviewer/page.html>この例をオンラインで表示する</a>。</span></p>
685    
686    
687     <h4 id=delegation class="has-ja-translation" data-ja-hash="57b11d3816e9f83adb4dd2ecb2a311b5"><span class=en-original lang=en><span class=secno>1.2.5 </span>Delegation</span><span class=ja-translation lang=ja><span class=secno>1.2.5 </span>委譲</span></h4>
688    
689 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
690 wakaba 1.111
691     <p class="no-ja-translation" data-ja-hash="318b797bf0c9a2cdaa476f36993911b4"><span class=en-original lang=en>With multicore CPUs becoming prevalent, one way to obtain better
692     performance is to split computationally expensive tasks amongst
693     multiple workers. In this example, a computationally expensive task
694     that is to be performed for every number from 1 to 10,000,000 is
695     farmed out to ten subworkers.</span></p>
696    
697     <p class="has-ja-translation" data-ja-hash="c5074121435848ef6ad420f030cb5060"><span class=en-original lang=en>The main page is as follows, it just reports the result:</span><span class=ja-translation lang=ja>主たる頁は次の通りで、単に結果を報告するだけです。</span></p>
698    
699     <pre class="no-ja-translation" data-ja-hash="45b861d46157f155d38040db723bafd1"><span class=en-original lang=en>&lt;!DOCTYPE HTML&gt;
700     &lt;html&gt;
701     &lt;head&gt;
702     &lt;title&gt;Worker example: One-core computation&lt;/title&gt;
703     &lt;/head&gt;
704     &lt;body&gt;
705     &lt;p&gt;The highest prime number discovered so far is: &lt;output id="result"&gt;&lt;/output&gt;&lt;/p&gt;
706     &lt;script&gt;
707     var worker = new Worker('worker.js');
708     worker.onmessage = function (event) {
709     document.getElementById('result').textContent = event.data;
710     };
711     &lt;/script&gt;
712     &lt;/body&gt;
713     &lt;/html&gt;</span></pre>
714    
715     <p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:</span><span class=ja-translation lang=ja>労働者自体は次の通りです。</span></p>
716    
717     <pre class="no-ja-translation" data-ja-hash="c2f14df3c3648ecb143c9e271b6721df"><span class=en-original lang=en>// settings
718     var num_workers = 10;
719     var items_per_worker = 1000000;
720    
721     // start the workers
722     var result = 0;
723     var pending_workers = num_workers;
724     for (var i = 0; i &lt; num_workers; i += 1) {
725     var worker = new Worker('core.js');
726     worker.postMessage(i * items_per_worker);
727     worker.postMessage((i+1) * items_per_worker);
728     worker.onmessage = storeResult;
729     }
730    
731     // handle the results
732     function storeResult(event) {
733     result += 1*event.data;
734     pending_workers -= 1;
735     if (pending_workers &lt;= 0)
736     postMessage(result); // finished!
737     }</span></pre>
738    
739     <p class="has-ja-translation" data-ja-hash="f9236b42d2a99d988b848353511797fc"><span class=en-original lang=en>It consists of a loop to start the subworkers, and then a handler
740     that waits for all the subworkers to respond.</span><span class=ja-translation lang=ja>これは部分労働者を開始するループと、
741     すべての部分労働者が応答するのを待つ取扱器から成っています。</span></p>
742    
743     <p class="has-ja-translation" data-ja-hash="53f3483f6fffa25f7c6963e58d683f43"><span class=en-original lang=en>The subworkers are implemented as follows:</span><span class=ja-translation lang=ja>部分労働者は次のように実装します。</span></p>
744    
745     <pre class="no-ja-translation" data-ja-hash="90fc569c1c634a87b725ebbe4cc1e2f4"><span class=en-original lang=en>var start;
746     onmessage = getStart;
747     function getStart(event) {
748     start = 1*event.data;
749     onmessage = getEnd;
750     }
751    
752     var end;
753     function getEnd(event) {
754     end = 1*event.data;
755     onmessage = null;
756     work();
757     }
758    
759     function work() {
760     var result = 0;
761     for (var i = start; i &lt; end; i += 1) {
762     // perform some complex calculation here
763     result += 1;
764     }
765     postMessage(result);
766     close();
767     }</span></pre>
768    
769     <p class="has-ja-translation" data-ja-hash="fbf1b083b03c85854a8e892ef8add172"><span class=en-original lang=en>They receive two numbers in two events, perform the computation
770     for the range of numbers thus specified, and then report the result
771     back to the parent.</span><span class=ja-translation lang=ja>部分労働者は2つの事象で2つの数を受信し、指定された数の範囲の計算を行った後、
772     結果を親に報告します。
773     </span></p>
774    
775     <p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="4318fb9a581a7c14e58bfb2d61809f0c"><span class=en-original lang=en><a href=http://www.whatwg.org/demos/workers/multicore/page.html>View this example online</a>.</span><span class=ja-translation lang=ja><a href=http://www.whatwg.org/demos/workers/multicore/page.html>この例をオンラインで表示する</a>。</span></p>
776    
777    
778     <h4 id=providing-libraries class="has-ja-translation" data-ja-hash="6c37218e175bff77f69bd84b1ab5da58"><span class=en-original lang=en><span class=secno>1.2.6 </span>Providing libraries</span><span class=ja-translation lang=ja><span class=secno>1.2.6 </span>ライブラリーの提供</span></h4>
779    
780 wakaba 1.135 <p class="no-ja-translation" data-ja-hash="2b52ab89148ac538f9c9380fc5da5b2f"><span class=en-original lang=en><i>This section is non-normative.</i></span></p>
781 wakaba 1.111
782     <p class="no-ja-translation" data-ja-hash="12371907fb7e8389f76fabaf7a5f8303"><span class=en-original lang=en>Suppose that a cryptography library is made available that
783     provides three tasks:</span></p>
784    
785     <dl><dt class="has-ja-translation" data-ja-hash="6ea027035e660e254aba77f4bd9cb6e7"><span class=en-original lang=en>Generate a public/private key pair</span><span class=ja-translation lang=ja>公開鍵・秘密鍵の組の生成</span></dt>
786    
787     <dd class="no-ja-translation" data-ja-hash="cf9020803baa896d8a183fe324563704"><span class=en-original lang=en>Takes a port, on which it will send two messages, first the
788     public key and then the private key.</span></dd>
789    
790     <dt class="no-ja-translation" data-ja-hash="fb7dd035a8141087578088ce61f9db22"><span class=en-original lang=en>Given a plaintext and a public key, return the corresponding cyphertext</span></dt>
791    
792     <dd class="no-ja-translation" data-ja-hash="1d31efc883e22a218f807161c65291f0"><span class=en-original lang=en>Takes a port, to which any number of messages can be sent, the
793     first giving the public key, and the remainder giving the
794     plaintext, each of which is encrypted and then sent on that same
795     channel as the cyphertext. The user can close the port when it is
796     done encrypting content.</span></dd>
797    
798     <dt class="no-ja-translation" data-ja-hash="11ea02c6f203744166e5a89e81a81337"><span class=en-original lang=en>Given a cyphertext and a private key, return the corresponding plaintext</span></dt>
799    
800     <dd class="no-ja-translation" data-ja-hash="c157fe0e540c248dc1db29edbd80ff82"><span class=en-original lang=en>Takes a port, to which any number of messages can be sent, the
801     first giving the private key, and the remainder giving the
802     cyphertext, each of which is decrypted and then sent on that same
803     channel as the plaintext. The user can close the port when it is
804     done decrypting content.</span></dd>
805    
806     </dl><p class="has-ja-translation" data-ja-hash="0e39ac88e71e60206c341926e3785dcd"><span class=en-original lang=en>The library itself is as follows:</span><span class=ja-translation lang=ja>ライブラリー自体は次のようになります。</span></p>
807    
808     <pre class="no-ja-translation" data-ja-hash="6c23fb6fef8f715101d908de56f2cb63"><span class=en-original lang=en>function handleMessage(e) {
809     if (e.data == "genkeys")
810     genkeys(e.ports[0]);
811     else if (e.data == "encrypt")
812     encrypt(e.ports[0]);
813     else if (e.data == "decrypt")
814     decrypt(e.ports[0]);
815     }
816    
817     function genkeys(p) {
818     var keys = _generateKeyPair();
819     p.postMessage(keys[0]);
820     p.postMessage(keys[1]);
821     }
822    
823     function encrypt(p) {
824     var key, state = 0;
825     p.onmessage = function (e) {
826     if (state == 0) {
827     key = e.data;
828     state = 1;
829     } else {
830     p.postMessage(_encrypt(key, e.data));
831     }
832     };
833     }
834    
835     function decrypt(p) {
836     var key, state = 0;
837     p.onmessage = function (e) {
838     if (state == 0) {
839     key = e.data;
840     state = 1;
841     } else {
842     p.postMessage(_decrypt(key, e.data));
843     }
844     };
845     }
846    
847     // support being used as a shared worker as well as a dedicated worker
848     if (this.onmessage) // dedicated worker
849     onmessage = handleMessage;
850     else // shared worker
851     onconnect = function (e) { e.port.onmessage = handleMessage; }
852    
853    
854     // the "crypto" functions:
855    
856     function _generateKeyPair() {
857     return [Math.random(), Math.random()];
858     }
859    
860     function _encrypt(k, s) {
861     return 'encrypted-' + k + ' ' + s;
862     }
863    
864     function _decrypt(k, s) {
865     return s.substr(s.indexOf(' ')+1);
866     }</span></pre>
867    
868     <p class="no-ja-translation" data-ja-hash="e6e3003b829ed060f5926d1763f29c2e"><span class=en-original lang=en>Note that the crypto functions here are just stubs and don't do
869     real cryptography.</span></p>
870    
871     <p class="has-ja-translation" data-ja-hash="76f1d5866d92bc1036d1198cf4eda428"><span class=en-original lang=en>This library could be used as follows:</span><span class=ja-translation lang=ja>このライブラリーは次のように使うことができます。</span></p>
872    
873     <pre class="no-ja-translation" data-ja-hash="e88a411ca9b20f088116732dc0db6171"><span class=en-original lang=en>&lt;!DOCTYPE HTML&gt;
874     &lt;html&gt;
875     &lt;head&gt;
876     &lt;title&gt;Worker example: Crypto library&lt;/title&gt;
877     &lt;script&gt;
878     var crytoLib = new Worker('libcrypto-v1.js'); // or could use 'libcrypto-v2.js'
879     function getKeys() {
880     var state = 0;
881     cryptoLib.startConversation("genkeys").onmessage = function (e) {
882     if (state == 0)
883     document.getElementById('public').value = e.data;
884     else if (state == 1)
885     document.getElementById('private').value = e.data;
886     state += 1;
887     };
888     }
889     function enc() {
890     var port = cryptoLib.startConversation("encrypt");
891     port.postMessage(document.getElementById('public').value);
892     port.postMessage(document.getElementById('input').value);
893     port.onmessage = function (e) {
894     document.getElementById('input').value = e.data;
895     port.close();
896     };
897     }
898     function dec() {
899     var port = cryptoLib.startConversation("decrypt");
900     port.postMessage(document.getElementById('private').value);
901     port.postMessage(document.getElementById('input').value);
902     port.onmessage = function (e) {
903     document.getElementById('input').value = e.data;
904     port.close();
905     };
906     }
907     &lt;/script&gt;
908     &lt;style&gt;
909     textarea { display: block; }
910     &lt;/style&gt;
911     &lt;/head&gt;
912     &lt;body onload="getKeys()"&gt;
913     &lt;fieldset&gt;
914     &lt;legend&gt;Keys&lt;/legend&gt;
915     &lt;p&gt;&lt;label&gt;Public Key: &lt;textarea id="public"&gt;&lt;/textarea&gt;&lt;/label&gt;&lt;/p&gt;
916     &lt;p&gt;&lt;label&gt;Private Key: &lt;textarea id="private"&gt;&lt;/textarea&gt;&lt;/label&gt;&lt;/p&gt;
917     &lt;/fieldset&gt;
918     &lt;p&gt;&lt;label&gt;Input: &lt;textarea id="input"&gt;&lt;/textarea&gt;&lt;/label&gt;&lt;/p&gt;
919     &lt;p&gt;&lt;button onclick="enc()"&gt;Encrypt&lt;/button&gt; &lt;button onclick="dec()"&gt;Decrypt&lt;/button&gt;&lt;/p&gt;
920     &lt;/body&gt;
921     &lt;/html&gt;</span></pre>
922    
923     <p class="no-ja-translation" data-ja-hash="13181de825fa0e152c5a954e55715a15"><span class=en-original lang=en>A later version of the API, though, might want to offload all the
924     crypto work onto subworkers. This could be done as follows:</span></p>
925    
926     <pre class="no-ja-translation" data-ja-hash="4700bd96e4f3524347953c148b483479"><span class=en-original lang=en>function handleMessage(e) {
927     if (e.data == "genkeys")
928     genkeys(e.ports[0]);
929     else if (e.data == "encrypt")
930     encrypt(e.ports[0]);
931     else if (e.data == "decrypt")
932     decrypt(e.ports[0]);
933     }
934    
935     function genkeys(p) {
936     var generator = new Worker('libcrypto-v2-generator.js');
937     generator.postMessage('', [p]);
938     }
939    
940     function encrypt(p) {
941     p.onmessage = function (e) {
942     var key = e.data;
943     var encryptor = new Worker('libcrypto-v2-encryptor.js');
944     encryptor.postMessage(key, [p]);
945     };
946     }
947    
948     function encrypt(p) {
949     p.onmessage = function (e) {
950     var key = e.data;
951     var decryptor = new Worker('libcrypto-v2-decryptor.js');
952     decryptor.postMessage(key, [p]);
953     };
954     }
955    
956     // support being used as a shared worker as well as a dedicated worker
957     if (this.onmessage) // dedicated worker
958     onmessage = handleMessage;
959     else // shared worker
960     onconnect = function (e) { e.ports[0].onmessage = handleMessage };
961     </span></pre>
962    
963     <p class="has-ja-translation" data-ja-hash="fc1d14c413a94a9015153067739845e7"><span class=en-original lang=en>The little subworkers would then be as follows.</span><span class=ja-translation lang=ja>小部分労働者は次の通りです。</span></p>
964    
965     <p class="has-ja-translation" data-ja-hash="66f9c4d246b0081919ced7e46c4a9db2"><span class=en-original lang=en>For generating key pairs:</span><span class=ja-translation lang=ja>鍵組の生成用:</span></p>
966    
967     <pre class="no-ja-translation" data-ja-hash="7fcbde64ee437c101414bcc98d9e1ee0"><span class=en-original lang=en>onmessage = function (e) {
968     var k = _generateKeyPair();
969     e.ports[0].postMessage(k[0]);
970     e.ports[0].postMessage(k[1]);
971     close();
972     }
973    
974     function _generateKeyPair() {
975     return [Math.random(), Math.random()];
976     }</span></pre>
977    
978     <p class="has-ja-translation" data-ja-hash="1f07f24df05f20de47483db4dfde2017"><span class=en-original lang=en>For encrypting:</span><span class=ja-translation lang=ja>暗号化用:</span></p>
979    
980     <pre class="no-ja-translation" data-ja-hash="94aaf906f90e9b3539c4219ef2be60cf"><span class=en-original lang=en>onmessage = function (e) {
981     var key = e.data;
982     e.ports[0].onmessage = function (e) {
983     var s = e.data;
984     postMessage(_encrypt(key, s));
985     }
986     }
987    
988     function _encrypt(k, s) {
989     return 'encrypted-' + k + ' ' + s;
990     }</span></pre>
991    
992     <p class="has-ja-translation" data-ja-hash="abf884f40593747f458e7d7400b1eb21"><span class=en-original lang=en>For decrypting:</span><span class=ja-translation lang=ja>解読用:</span></p>
993    
994     <pre class="no-ja-translation" data-ja-hash="c91e2f3055da293b534ac3c10648b23e"><span class=en-original lang=en>onmessage = function (e) {
995     var key = e.data;
996     e.ports[0].onmessage = function (e) {
997     var s = e.data;
998     postMessage(_decrypt(key, s));
999     }
1000     }
1001    
1002     function _decrypt(k, s) {
1003     return s.substr(s.indexOf(' ')+1);
1004     }</span></pre>
1005    
1006     <p class="no-ja-translation" data-ja-hash="c8da0ee0afd0a36dc51fa6bebbb8a3e9"><span class=en-original lang=en>Notice how the users of the API don't have to even know that this
1007     is happening &mdash; the API hasn't changed; the library can
1008     delegate to subworkers without changing its API, even though it is
1009     accepting data using message channels.</span></p>
1010    
1011     <p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="22a665d401474bea0ab24f5873ba4d61"><span class=en-original lang=en><a href=http://www.whatwg.org/demos/workers/crypto/page.html>View this example online</a>.</span><span class=ja-translation lang=ja><a href=http://www.whatwg.org/demos/workers/crypto/page.html>この例をオンラインで表示する</a>。</span></p>
1012    
1013    
1014    
1015    
1016     <h2 id=conformance-requirements class="has-ja-translation" data-ja-hash="05644f41fb2fbf61aaab52464b2edf3b"><span class=en-original lang=en><span class=secno>2 </span>Conformance requirements</span><span class=ja-translation lang=ja><span class=secno>2 </span>適合性要件</span></h2>
1017    
1018     <p class="has-ja-translation" data-ja-hash="8b0f72fe04577949924ab1e2997e0d8b"><span class=en-original lang=en>All diagrams, examples, and notes in this specification are
1019     non-normative, as are all sections explicitly marked non-normative.
1020     Everything else in this specification is normative.</span><span class=ja-translation lang=ja>この仕様書のすべての図、例示、注意書き、ならびに規定の一部ではないと明記したすべての節は、
1021     規定の一部ではありません。
1022     この仕様書のそれ以外の部分はすべて規定の一部です。</span></p>
1023    
1024     <p class="has-ja-translation" data-ja-hash="8adc9958d29b879426b71b5b9eae46db"><span class=en-original lang=en>The key words "MUST", "MUST NOT", "REQUIRED", <!--"SHALL", "SHALL
1025     NOT",--> "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
1026     "OPTIONAL" in the normative parts of this document are to be
1027     interpreted as described in RFC2119. For readability, these words do
1028     not appear in all uppercase letters in this specification. <a href=#refsRFC2119>[RFC2119]</a></span><span class=ja-translation lang=ja>この文書の規定の部分にあるキーワード「<em class=rfc2119 title="MUST">しなければなりません</em>」、
1029     「<em class=rfc2119 title="MUST NOT">してはなりません</em>」、
1030     「<em class=rfc2119 title="REQUIRED">必須です</em>」、<!--"SHALL", "SHALL
1031     NOT",-->「<em class=rfc2119 title="SHOULD">するべきです</em>」、
1032     「<em class=rfc2119 title="SHOULD NOT">するべきではありません</em>」、
1033     「<em class=rfc2119 title="RECOMMENDED">推奨します</em>」、「<em class=rfc2119 title="MAY">して構いません</em>」、
1034     「<em class=rfc2119 title="OPTIONAL">任意です</em>」は、 RFC 2119 で説明されているように解釈します。
1035     この仕様書<ins class=ja-note>の原文</ins>では、
1036     可読性の観点から、
1037     これらの語<ins class=ja-note>の原語</ins>のすべて大文字による表記は行っていません。
1038     <a href=#refsRFC2119>[RFC2119]</a></span></p>
1039    
1040     <p class="has-ja-translation" data-ja-hash="63dc4357c416e0e0f292a5f662ca71ab"><span class=en-original lang=en>Requirements phrased in the imperative as part of algorithms
1041     (such as "strip any leading space characters" or "return false and
1042     abort these steps") are to be interpreted with the meaning of the
1043     key word ("must", "should", "may", etc) used in introducing the
1044     algorithm.</span><span class=ja-translation lang=ja>算法の一部として<ins class=ja-note>動作の指示の形で (原文では</ins>命令形で<ins class=ja-note>) </ins>記述された要件
1045     (例えば「先頭の間隔文字をすべて除去します」や「偽を返し、これらの段階を停止します」)
1046     は、算法を紹介するに当たって使われたキーワード (<em class=rfc2119 title="MUST">しなければなりません</em>、
1047     <em class=rfc2119 title="SHOULD">するべきです</em>、<em class=rfc2119 title="MAY">して構いません</em>など) の意味により解釈します。</span></p>
1048    
1049     <p class="has-ja-translation" data-ja-hash="a5a0db584980ce3f2448983d6188b2d1"><span class=en-original lang=en>Some conformance requirements are phrased as requirements on
1050     attributes, methods or objects. Such requirements are to be
1051     interpreted as requirements on user agents.</span><span class=ja-translation lang=ja>いくつかの適合性要件は属性やメソッドやオブジェクトの要件として説明されています。
1052     そのような要件は、利用者エージェントに関する要件として解釈します。</span></p>
1053    
1054     <p class="has-ja-translation" data-ja-hash="27386c326b98d878b3c408c60b6095b0"><span class=en-original lang=en>Conformance requirements phrased as algorithms or specific steps
1055     may be implemented in any manner, so long as the end result is
1056     equivalent. (In particular, the algorithms defined in this
1057     specification are intended to be easy to follow, and not intended to
1058     be performant.)</span><span class=ja-translation lang=ja>算法や特定の段階として説明されている適合性要件は、
1059     最終的な結果が等価である限り、任意の方法で実装して<em class=rfc2119 title="MAY">構いません</em>。
1060     (特に、この仕様書で定義されている算法は追うのを簡単にしており、
1061     高性能であることを目指してはいません。)</span></p>
1062    
1063     <p class="has-ja-translation" data-ja-hash="e42931a32a5e7ad458e3ca1b87d741d9"><span class=en-original lang=en>The only conformance class defined by this specification is user
1064     agents.</span><span class=ja-translation lang=ja>この仕様書で定義する唯一の適合性の級は利用者エージェントです。</span></p>
1065    
1066     <p class="has-ja-translation" data-ja-hash="57959e6c42e8d5141b11e501bf60cc2f"><span class=en-original lang=en>User agents may impose implementation-specific limits on
1067     otherwise unconstrained inputs, e.g. to prevent denial of service
1068     attacks, to guard against running out of memory, or to work around
1069     platform-specific limitations.</span><span class=ja-translation lang=ja>利用者エージェントは、サービス拒否攻撃を防ぐため、
1070     記憶容量を使い尽くすことを防ぐため、
1071     あるいは環境特有の制限に対応するためなどの目的で、
1072     別段の制約のない入力に対して実装特有の制限を設けて<em class=rfc2119 title="MAY">構いません</em>。</span></p>
1073    
1074    
1075 wakaba 1.137 <h2 id=dependencies class="has-ja-translation" data-ja-hash="896f4eaa4f12972b56ed9cdd9a90b949"><span class=en-original lang=en><span class=secno>3 </span>Dependencies</span><span class=ja-translation lang=ja><span class=secno>3 </span>依存性</span></h2>
1076 wakaba 1.111
1077     <p class="has-ja-translation" data-ja-hash="8dc27a34324d9e41d25c6bbbc2d2551c"><span class=en-original lang=en>This specification relies on several other underlying
1078     specifications.</span><span class=ja-translation lang=ja>この仕様書は、他のいくつかの下位の仕様書に依存しています。</span></p>
1079    
1080     <dl><dt class="no-ja-translation" data-ja-hash="6bff62b10d884fb77428cfe168cd783d"><span class=en-original lang=en>HTML5</span></dt>
1081    
1082     <dd>
1083    
1084     <p class="has-ja-translation" data-ja-hash="99d7a97f59faf316f6125ad288390f21"><span class=en-original lang=en>Many fundamental concepts from HTML5 are used by this
1085     specification. <a href=#refsHTML5>[HTML5]</a></span><span class=ja-translation lang=ja>この仕様書では、 HTML5 の多くの基礎的な概念を使用します。
1086     <a href=#refsHTML5>[HTML5]</a></span></p>
1087    
1088     </dd>
1089    
1090     <dt class="no-ja-translation" data-ja-hash="21838f6e93b1a2157b16dcb6281ff225"><span class=en-original lang=en>WebIDL</span></dt>
1091    
1092     <dd>
1093    
1094     <p class="has-ja-translation" data-ja-hash="a9c4aac7340973a8cba95e916539c5d9"><span class=en-original lang=en>The IDL blocks in this specification use the semantics of the
1095     WebIDL specification. <a href=#refsWebIDL>[WebIDL]</a></span><span class=ja-translation lang=ja>この仕様書の IDL ブロックは、WebIDL 仕様書における意味を用います。 <a href=#refsWebIDL>[WebIDL]</a></span></p>
1096    
1097     </dd>
1098    
1099 wakaba 1.137 </dl><h2 id=terminology class="has-ja-translation" data-ja-hash="e182a8a3f2adf774fb1c959df71b8600"><span class=en-original lang=en><span class=secno>4 </span>Terminology</span><span class=ja-translation lang=ja><span class=secno>4 </span>用語</span></h2>
1100 wakaba 1.111
1101     <p class="has-ja-translation" data-ja-hash="f99630e4a7f12f2c4ecb88e02bf4a644"><span class=en-original lang=en>The construction "a <code title="">Foo</code> object", where
1102     <code title="">Foo</code> is actually an interface, is sometimes
1103     used instead of the more accurate "an object implementing the
1104     interface <code title="">Foo</code>".</span><span class=ja-translation lang=ja>「<code title="">Foo</code> オブジェクト」という構文 (<code title="">Foo</code>
1105     は実際には界面) を時々使いますが、より正確な「界面 <code title="">Foo</code>
1106     を実装しているオブジェクト」の代わりに用いています。</span></p>
1107    
1108     <p class="has-ja-translation" data-ja-hash="12e69607f07368ff572adb4dffcc8535"><span class=en-original lang=en>The term DOM is used to refer to the API set made available to
1109     scripts in Web applications, and does not necessarily imply the
1110     existence of an actual <code>Document</code> object or of any other
1111     <code>Node</code> objects as defined in the DOM Core
1112     specifications. <a href=#refsDOM3CORE>[DOM3CORE]</a></span><span class=ja-translation lang=ja>DOM という語は、 Web アプリケーションでスクリプトに利用可能とされている API
1113     の集合を指して用い、必ずしも DOM 中核仕様書で定義されている実際の
1114     <code>Document</code> オブジェクトその他の <code>Node</code>
1115     オブジェクトの存在を暗示してはいません。<a
1116     href=#refsDOM3CORE>[DOM3CORE]</a></span></p>
1117    
1118     <p class="has-ja-translation" data-ja-hash="5b9242da79aeab74bccc57781ac3103e"><span class=en-original lang=en>A DOM attribute is said to be <em>getting</em> when its value is
1119     being retrieved (e.g. by author script), and is said to be
1120     <em>setting</em> when a new value is assigned to it.</span><span class=ja-translation lang=ja>DOM 属性は、その値が (例えば著者のスクリプトにより) 取り出される時<em>取得される</em>といい、
1121     新しい値がその属性に割り当てられる時<em>設定される</em>といいます。</span></p>
1122    
1123     <p class="no-ja-translation" data-ja-hash="63fe78b97a0b5051e1ffbf6ee2f1e483"><span class=en-original lang=en>The term "JavaScript" is used to refer to ECMA262, rather than
1124     the official term ECMAScript, since the term JavaScript is more
1125     widely known. <a href=#refsECMA262>[ECMA262]</a></span></p>
1126    
1127    
1128 wakaba 1.137 <h2 id=infrastructure class="has-ja-translation" data-ja-hash="cba4f4cee5c6a3e6d8be8da68fa1234e"><span class=en-original lang=en><span class=secno>5 </span>Infrastructure</span><span class=ja-translation lang=ja><span class=secno>5 </span>基盤</span></h2>
1129 wakaba 1.111
1130     <p class="no-ja-translation" data-ja-hash="f38a96d03c61f343169a402b5c779db8"><span class=en-original lang=en>There are two kinds of workers; dedicated workers, and shared
1131     workers. Dedicated workers, once created, and are linked to their
1132     creator; but message ports can be used to communicate from a
1133     dedicated worker to multiple other browsing contexts or
1134     workers. Shared workers, on the other hand, are named, and once
1135     created any script running in the same <span>origin</span> can
1136     obtain a reference to that worker and communicate with it.</span></p>
1137    
1138    
1139 wakaba 1.137 <h3 id=the-global-scope class="has-ja-translation" data-ja-hash="16d7670f16b3aaf6130252e8f11702eb"><span class=en-original lang=en><span class=secno>5.1 </span>The global scope</span><span class=ja-translation lang=ja><span class=secno>5.1 </span>大域作用域</span></h3>
1140 wakaba 1.111
1141     <p class="has-ja-translation" data-ja-hash="216dee088449fef485a489ea8a7432f4"><span class=en-original lang=en>The global scope is the "inside" of a worker.</span><span class=ja-translation lang=ja>大域作用域は労働者の「内側」です。</span></p>
1142    
1143 wakaba 1.137 <h4 id=the-workerglobalscope-abstract-interface class="has-ja-translation" data-ja-hash="fe5227371e801f4ac588d0d07472a900" data-ja-real-hash="be491e4df478a7115eae60853f3c23aa"><span class=en-original lang=en><span class=secno>5.1.1 </span>The <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> abstract interface</span><span class=ja-translation lang=ja><span class=secno>5.1.1 </span><code><a href=#workerglobalscope>WorkerGlobalScope</a></code> 抽象界面</span></h4>
1144 wakaba 1.111
1145 wakaba 1.137 <pre class="idl no-ja-translation" data-ja-hash="520a3d8524b0329ed4dab97e3a4a589f"><span class=en-original lang=en>interface <dfn id=workerglobalscope>WorkerGlobalScope</dfn> {
1146 wakaba 1.111 readonly attribute <a href=#workerglobalscope>WorkerGlobalScope</a> <a href=#dom-workerglobalscope-self title=dom-WorkerGlobalScope-self>self</a>;
1147     readonly attribute <a href=#workerlocation>WorkerLocation</a> <a href=#dom-workerglobalscope-location title=dom-WorkerGlobalScope-location>location</a>;
1148     // also implements everything on <a href=#workerutils>WorkerUtils</a>
1149    
1150     void <a href=#dom-workerglobalscope-close title=dom-WorkerGlobalScope-close>close</a>();
1151 wakaba 1.137 <!-- v2-onclose attribute <span>Function</span> <span title="handler-WorkerGlobalScope-onclose">onclose</span>;
1152     --> attribute <span>Function</span> <a href=#handler-workerglobalscope-onerror title=handler-WorkerGlobalScope-onerror>onerror</a>;
1153 wakaba 1.111 };</span></pre>
1154    
1155     <p class="no-ja-translation" data-ja-hash="d82fd6989aa746efef0cf182479d5e41"><span class=en-original lang=en>Objects implementing the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> interface
1156     must also implement the <code>EventTarget</code> interface.</span></p>
1157    
1158     <p class="no-ja-translation" data-ja-hash="0a5104552951765122b762e943a821b0"><span class=en-original lang=en>The <dfn id=dom-workerglobalscope-self title=dom-WorkerGlobalScope-self><code>self</code></dfn> attribute
1159     must return the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object itself.</span></p>
1160    
1161 wakaba 1.112 <p class="no-ja-translation" data-ja-hash="e48d78d83311d57328ab69a17167fffc"><span class=en-original lang=en>The <dfn id=dom-workerglobalscope-location title=dom-WorkerGlobalScope-location><code>location</code></dfn>
1162 wakaba 1.111 attribute must return the <code><a href=#workerlocation>WorkerLocation</a></code> object created
1163     for the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object when the worker was
1164     created. It represents the <span>absolute URL</span> of the script
1165 wakaba 1.112 that was used to initialize the worker, after any redirects.</span></p>
1166 wakaba 1.111
1167     <hr><p class="no-ja-translation" data-ja-hash="c205c04fbfcc56617b82329c66dbda4a"><span class=en-original lang=en>When a script invokes the <dfn id=dom-workerglobalscope-close title=dom-WorkerGlobalScope-close><code>close()</code></dfn>
1168     method on a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, the user agent
1169     must run the following steps (atomically):</span></p>
1170    
1171     <ol><li><p class="no-ja-translation" data-ja-hash="af4d5ddb9edfb1a69b29ed3140620794"><span class=en-original lang=en>Discard any <span title=concept-task>tasks</span> that
1172     have been added to the <span>event loop</span>'s <span title="task
1173     queue">task queues</span>.</span></p>
1174    
1175     <!-- v2-onclose
1176     <li><p class="no-ja-translation" data-ja-hash="8d73b86033e135135fa4dd2f2193b43e"><span class=en-original lang=en><span>Queue a task</span> to <span>fire a simple
1177     event</span> called <code title="event-close">close</code> at the
1178     <code>WorkerGlobalScope</code> object.</span></p></li>
1179     -->
1180    
1181     <li><p class="no-ja-translation" data-ja-hash="1e713e7163b783674600c93aed418557"><span class=en-original lang=en>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's
1182     <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
1183     true. (This prevents any further tasks from being queued.)</span></li>
1184    
1185     <li><p class="no-ja-translation" data-ja-hash="37da2c132b44ba85602699d1ef93c598"><span class=en-original lang=en>Disentangle all the ports in the list of <a href="#the-worker's-ports">the worker's
1186     ports</a>.</span></li>
1187    
1188     </ol><p class="no-ja-translation" data-ja-hash="82e59a1ba6d95a68947e7065fd8ac80b"><span class=en-original lang=en>The following are the <span>event handler attributes</span> (and their corresponding <span title="event handler event type">event handler event types</span>)
1189     that must be supported, as DOM attributes, by objects implementing
1190     the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> interface:</span></p>
1191    
1192     <table><thead><tr><th class="no-ja-translation" data-ja-hash="c85726f0c6ba202006ec1f912e68aa76"><span class=en-original lang=en><span title="event handler attributes">event handler attribute</span> </span><th class="no-ja-translation" data-ja-hash="3fc98eebba71602c62d8b2fd74645dc9"><span class=en-original lang=en><span>Event handler event type</span>
1193     </span><tbody><!-- v2-onclose <tr><td class="no-ja-translation" data-ja-hash="8299f4100f9c690ddf7935714f58b453"><span class=en-original lang=en><dfn title="handler-WorkerGlobalScope-onclose"><code>onclose</code></dfn> </span><td class="no-ja-translation" data-ja-hash="e899358e829911a25c083ed9bc6519e6"><span class=en-original lang=en> <code title="event-close">close</code> --></span><tr><td class="no-ja-translation" data-ja-hash="08a21be8031dd240d32ac8ab2b17a9ac"><span class=en-original lang=en><dfn id=handler-workerglobalscope-onerror title=handler-WorkerGlobalScope-onerror><code>onerror</code></dfn> </span><td class="no-ja-translation" data-ja-hash="bf1b78c16e7c3a3de662d83f487bffff"><span class=en-original lang=en> <code title=event-error>error</code>
1194 wakaba 1.137 </span></table><h4 id=dedicated-workers-and-the-dedicatedworkerglobalscope-interface class="no-ja-translation" data-ja-hash="a4b427f41de050a77385a1705efbb7c1"><span class=en-original lang=en><span class=secno>5.1.2 </span>Dedicated workers and the <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> interface</span></h4>
1195 wakaba 1.111
1196 wakaba 1.137 <pre class="idl no-ja-translation" data-ja-hash="08df38e62ab45b650a6cfda29b5cfd61"><span class=en-original lang=en>[NoInterfaceObject, Supplemental] interface <dfn id=dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</dfn> : <a href=#workerglobalscope>WorkerGlobalScope</a> {
1197 wakaba 1.111 void <a href=#dom-dedicatedworkerglobalscope-postmessage title=dom-DedicatedWorkerGlobalScope-postMessage>postMessage</a>(in any message, [Optional] in <span>MessagePortArray</span> ports);<!--
1198     <span>MessagePort</span> <span title="dom-DedicatedWorkerGlobalScope-startConversation">startConversation</span>(in any message);-->
1199 wakaba 1.137 attribute <span>Function</span> <a href=#handler-dedicatedworkerglobalscope-onmessage title=handler-DedicatedWorkerGlobalScope-onmessage>onmessage</a>;
1200 wakaba 1.111 };</span></pre>
1201    
1202     <p class="no-ja-translation" data-ja-hash="2b76e99642dd9984f9a5fb8a280c921c"><span class=en-original lang=en><code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> objects act as if they
1203     had an implicit <code>MessagePort</code> associated with them. This
1204     port is part of a channel that is set up when the worker is created,
1205     but it is not exposed. This object must never be garbage collected
1206     before the <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object.</span></p>
1207    
1208     <p class="no-ja-translation" data-ja-hash="3737098ad5998864275d8ee619bd864e"><span class=en-original lang=en>All messages received by that port must immediately be retargeted
1209     at the <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object.</span></p>
1210    
1211     <p class="no-ja-translation" data-ja-hash="8156ab5347965f42a9531625b8096a00"><span class=en-original lang=en>The <dfn id=dom-dedicatedworkerglobalscope-postmessage title=dom-DedicatedWorkerGlobalScope-postMessage><code>postMessage()</code></dfn><!--
1212     and <dfn
1213     title="dom-DedicatedWorkerGlobalScope-startConversation"><code>startConversation()</code></dfn>-->
1214     method<!--s (startConversation)--> on
1215     <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> objects must act as if, when
1216     invoked, it<!--/they (startConversation)--> immediately invoked the
1217     method of the same name on the port, with the same arguments, and
1218     returned the same return value.</span></p>
1219    
1220     <p class="no-ja-translation" data-ja-hash="4485ef1302525e70204d808989daff0e"><span class=en-original lang=en>The following are the <span>event handler attributes</span> (and
1221     their corresponding <span title="event handler event type">event
1222     handler event types</span>) that must be supported, as DOM
1223     attributes, by objects implementing the
1224     <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> interface:</span></p>
1225    
1226     <table><thead><tr><th class="no-ja-translation" data-ja-hash="c85726f0c6ba202006ec1f912e68aa76"><span class=en-original lang=en><span title="event handler attributes">event handler attribute</span> </span><th class="no-ja-translation" data-ja-hash="3fc98eebba71602c62d8b2fd74645dc9"><span class=en-original lang=en><span>Event handler event type</span>
1227     </span><tbody><tr><td class="no-ja-translation" data-ja-hash="0d8bd2da6a52d641c317fac6d1c953b2"><span class=en-original lang=en><dfn id=handler-dedicatedworkerglobalscope-onmessage title=handler-DedicatedWorkerGlobalScope-onmessage><code>onmessage</code></dfn> </span><td class="no-ja-translation" data-ja-hash="fe07e2527bf13c457386ab4807af84a0"><span class=en-original lang=en> <code title=event-message>message</code>
1228     </span></table><p class="no-ja-translation" data-ja-hash="0c348925ec14031682913edd79ceb3d3"><span class=en-original lang=en>For the purposes of the <span>offline application cache</span>
1229     networking model, a dedicated worker is an extension of the
1230     <span>cache host</span> from which it was created.</span></p>
1231    
1232    
1233    
1234 wakaba 1.137 <h4 id=shared-workers-and-the-sharedworkerglobalscope-inteface class="no-ja-translation" data-ja-hash="6ab8095d66816337c244beec43a0e6d4"><span class=en-original lang=en><span class=secno>5.1.3 </span>Shared workers and the <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> inteface</span></h4>
1235 wakaba 1.111
1236 wakaba 1.137 <pre class="idl no-ja-translation" data-ja-hash="e5bb109b19e21bdec30f53411bb22182"><span class=en-original lang=en>[NoInterfaceObject, Supplemental] interface <dfn id=sharedworkerglobalscope>SharedWorkerGlobalScope</dfn> : <a href=#workerglobalscope>WorkerGlobalScope</a> {
1237 wakaba 1.111 readonly attribute DOMString <a href=#dom-sharedworkerglobalscope-name title=dom-SharedWorkerGlobalScope-name>name</a>;
1238     readonly attribute <span>ApplicationCache</span> <a href=#dom-sharedworkerglobalscope-applicationcache title=dom-SharedWorkerGlobalScope-applicationCache>applicationCache</a>;
1239 wakaba 1.137 attribute <span>Function</span> <a href=#handler-sharedworkerglobalscope-onconnect title=handler-SharedWorkerGlobalScope-onconnect>onconnect</a>;
1240 wakaba 1.111 };</span></pre>
1241    
1242     <p class="has-ja-translation" data-ja-hash="9d344498c69a5ed60029b76fb274beb2"><span class=en-original lang=en>Shared workers receive message ports through <code title=event-WorkerGlobalScope-connect>connect</code> events on
1243     their global object for each connection.</span><span class=ja-translation lang=ja>共有労働者は、各接続について大域オブジェクトの <code
1244     title=event-WorkerGlobalScope-connect>connect</code> 事象を通じてメッセージ・ポートを受信します。</span></p>
1245    
1246     <p class="no-ja-translation" data-ja-hash="582a890c60947f33bddb73ed33bb32f9"><span class=en-original lang=en>The <dfn id=dom-sharedworkerglobalscope-name title=dom-SharedWorkerGlobalScope-name><code>name</code></dfn>
1247     attribute must return the value it was assigned when the
1248     <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object was created by the
1249     "<a href=#run-a-worker>run a worker</a>" algorithm. Its value represents the name
1250     that can be used to obtain a reference to the worker using the
1251     <code><a href=#sharedworker>SharedWorker</a></code> constructor.</span></p>
1252    
1253     <p class="no-ja-translation" data-ja-hash="89036f99dca015c66728e21089b984b0"><span class=en-original lang=en>The following are the <span>event handler attributes</span> (and
1254     their corresponding <span title="event handler event type">event
1255     handler event types</span>) that must be supported, as DOM
1256     attributes, by objects implementing the
1257     <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> interface:</span></p>
1258    
1259     <table><thead><tr><th class="no-ja-translation" data-ja-hash="c85726f0c6ba202006ec1f912e68aa76"><span class=en-original lang=en><span title="event handler attributes">event handler attribute</span> </span><th class="no-ja-translation" data-ja-hash="3fc98eebba71602c62d8b2fd74645dc9"><span class=en-original lang=en><span>Event handler event type</span>
1260     </span><tbody><tr><td class="no-ja-translation" data-ja-hash="f198960aead81a70dcfd8fe22ce3e5c3"><span class=en-original lang=en><dfn id=handler-sharedworkerglobalscope-onconnect title=handler-SharedWorkerGlobalScope-onconnect><code>onconnect</code></dfn> </span><td class="no-ja-translation" data-ja-hash="01a017777bf3db29f5ec26ca1ad7aced"><span class=en-original lang=en> <code title=event-connect>connect</code>
1261     </span></table><p class="no-ja-translation" data-ja-hash="ac81324d4bd9e8a1090d3db7e2e34ca9"><span class=en-original lang=en>For the purposes of the <span>offline application cache</span>
1262     networking model, a shared worker is its own <span>cache
1263     host</span>. The <a href=#run-a-worker>run a worker</a> algorithm takes care of
1264     associating the worker with an <span>application cache</span>.</span></p>
1265    
1266     <p class="note no-ja-translation" data-ja-hash="eb3d6f833d8fb42a6cea6890baeaf796"><span class=en-original lang=en>The <dfn id=dom-sharedworkerglobalscope-applicationcache title=dom-SharedWorkerGlobalScope-applicationCache><code>applicationCache</code></dfn>
1267     attribute returns the <code>ApplicationCache</code> object for the
1268     worker.</span></p><!-- normative conf criteria is in the appcache section
1269     -->
1270    
1271    
1272 wakaba 1.137 <h3 id=base-urls-and-origins-of-workers class="has-ja-translation" data-ja-hash="87cf5066db3fe786def6b713cf422c90"><span class=en-original lang=en><span class=secno>5.2 </span>Base URLs and origins of workers</span><span class=ja-translation lang=ja><span class=secno>5.2 </span>労働者の基底 URL と起源</span></h3>
1273 wakaba 1.111
1274     <p class="no-ja-translation" data-ja-hash="5d71247ae9c7e88e4244d78062ed4760"><span class=en-original lang=en>Both the <span>origin</span> and <span>effective script
1275     origin</span> of scripts running in workers are the
1276     <span>origin</span> of the <span>absolute URL</span> given in that
1277     the worker's <code title=dom-WorkerGlobalScope-location><a href=#dom-workerglobalscope-location>location</a></code> attribute
1278     represents.</span></p>
1279    
1280    
1281 wakaba 1.137 <h3 id=decoding-scripts class="no-ja-translation" data-ja-hash="857fdf8086147b470ea754e3a4f6c667"><span class=en-original lang=en><span class=secno>5.3 </span>Decoding scripts</span></h3>
1282 wakaba 1.111
1283     <p class="no-ja-translation" data-ja-hash="4356cf7102f2b838e2b8201769e8d8ed"><span class=en-original lang=en>When a user agent is to <dfn id=decode-a-script-resource>decode a script resource</dfn> to
1284     obtain its source in Unicode, it must run the following steps:</span></p>
1285    
1286     <ol><li>
1287    
1288     <p class="no-ja-translation" data-ja-hash="6571036d6f54aff003088a24c671dfc7"><span class=en-original lang=en>Let <var title="">character encoding</var> be <i title="">unknown</i>.</span></p>
1289    
1290     </li>
1291    
1292     <li>
1293    
1294     <p class="no-ja-translation" data-ja-hash="26531f4017a22df14ccb6d1eee6264e7"><span class=en-original lang=en>For each of the rows in the following table, starting with the
1295     first one and going down, if the resource has as many or more
1296     bytes available than the number of bytes in the first column, and
1297     the first bytes of the resource match the bytes given in the first
1298     column, then let <var title="">character encoding</var> be the
1299     encoding given in the cell in the second column of that row:</span></p>
1300    
1301     <!-- this table is present in several forms in this file; keep them in sync -->
1302     <table><thead><tr><th class="has-ja-translation" data-ja-hash="cedd90a7eefcd8a4c28ead96824a8c5a"><span class=en-original lang=en>Bytes in Hexadecimal
1303     </span><span class=ja-translation lang=ja>バイトの十六進数表現</span><th class="has-ja-translation" data-ja-hash="169a6f6b44766410bffebf76ff3dcf17"><span class=en-original lang=en>Encoding
1304     </span><span class=ja-translation lang=ja>符号化</span><tbody><!-- nobody uses this
1305     <tr>
1306     <td class="no-ja-translation" data-ja-hash="3b523bf4f5c7a5f0ff3963fdad8049a9"><span class=en-original lang=en>00 00 FE FF
1307     </span><td class="no-ja-translation" data-ja-hash="59e7c7bf45f69d917450ae560a578a4f"><span class=en-original lang=en>UTF-32BE
1308     </span><tr>
1309     <td class="no-ja-translation" data-ja-hash="e25d985f134390f54047573f4a1eca7e"><span class=en-original lang=en>FF FE 00 00
1310     </span><td class="no-ja-translation" data-ja-hash="83039ece36f32fba267280c8de26edf5"><span class=en-original lang=en>UTF-32LE
1311     --></span><tr><td class="no-ja-translation" data-ja-hash="d9594f5bb7f7387cd1c6d8cb69fb5774"><span class=en-original lang=en>FE FF
1312     </span><td class="no-ja-translation" data-ja-hash="58ee3e3038c435c19dfa106ac8b67d73"><span class=en-original lang=en>UTF-16BE
1313     </span><tr><td class="no-ja-translation" data-ja-hash="3d748bc0fd7caa28cb9bd697c840f46f"><span class=en-original lang=en>FF FE
1314     </span><td class="no-ja-translation" data-ja-hash="600ebb464ff7e548ff5a09c2c12f551b"><span class=en-original lang=en>UTF-16LE
1315     </span><tr><td class="no-ja-translation" data-ja-hash="5d1b4e645efa35016b709ffbd308e29d"><span class=en-original lang=en>EF BB BF
1316     </span><td class="no-ja-translation" data-ja-hash="ae3b3df9970b49b6523e608759bc957d"><span class=en-original lang=en>UTF-8
1317     <!-- nobody uses this
1318     --></span><!--<tr>
1319     <td class="no-ja-translation" data-ja-hash="7d1cd1d79b5ca7151c2153c016bc5c49"><span class=en-original lang=en>DD 73 66 73
1320     </span><td class="no-ja-translation" data-ja-hash="48ad579645de9a10a9a6f78fab81fb65"><span class=en-original lang=en>UTF-EBCDIC
1321     -->
1322     </span></table><p class="note no-ja-translation" data-ja-hash="9a59482dc82872c443907eeed8818b89"><span class=en-original lang=en>This step looks for Unicode Byte Order Marks
1323     (BOMs).</span></p>
1324    
1325     </li>
1326    
1327     <li>
1328    
1329     <p class="no-ja-translation" data-ja-hash="1bdaa4e7198023dcf4f7984a4898619a"><span class=en-original lang=en>If <var title="">character encoding</var> is still <i title="">unknown</i>, apply the <span>algorithm for extracting an
1330     encoding from a Content-Type</span> to the resource's <span title=Content-Type>Content Type metadata</span>; if this returns
1331     an encoding, and the user agent supports that encoding, then let
1332     <var title="">character encoding</var> be that encoding.</span></p>
1333    
1334     </li>
1335    
1336     <li>
1337    
1338     <p class="no-ja-translation" data-ja-hash="6bbc467e6929571d61a6b95004cf9974"><span class=en-original lang=en>If <var title="">character encoding</var> is still <i title="">unknown</i>, then let <var title="">character
1339     encoding</var> be UTF-8.</span></p>
1340    
1341     </li>
1342    
1343     <li>
1344    
1345     <p class="no-ja-translation" data-ja-hash="178b2c0b2c79b7e38b80e13f0fac6983"><span class=en-original lang=en>Convert the resource to Unicode using the character encoding
1346     given by <var title="">character encoding</var>.</span></p>
1347    
1348     <p class="no-ja-translation" data-ja-hash="ee427dae6dec0a6bf731b3069f9a4abd"><span class=en-original lang=en>Return the text that is so obtained.</span></p>
1349    
1350     </li>
1351    
1352 wakaba 1.137 </ol><h3 id=the-event-loop class="no-ja-translation" data-ja-hash="96715962ce61ea28085d7e170ec30e73"><span class=en-original lang=en><span class=secno>5.4 </span>The event loop</span></h3>
1353 wakaba 1.111
1354 wakaba 1.112 <p class="no-ja-translation" data-ja-hash="9da3324200d63a62412fc5bc671f7d95"><span class=en-original lang=en>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object has an <span>event
1355     loop</span> distinct from those defined for <span title="unit of
1356     related similar-origin browsing contexts">units of related
1357     similar-origin browsing contexts</span>. This <span>event
1358     loop</span> has no associated <span>browsing context</span>, and its
1359     <span title="task queue">task queues</span> only have events,
1360     callbacks, and networking activity as <span title=concept-task>tasks</span>. The processing model of these
1361     <span title="event loop">event loops</span> is defined below in the
1362     <a href=#run-a-worker>run a worker</a> algorithm.</span></p>
1363 wakaba 1.111
1364     <p class="no-ja-translation" data-ja-hash="084ed34f256b8b7e4ff2b85cd92ca33b"><span class=en-original lang=en>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object also has a <dfn id=dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</dfn> flag, which must
1365     initially be false, but which can get set to true by the algorithms
1366     in the processing model section below.</span></p>
1367    
1368     <p class="no-ja-translation" data-ja-hash="35f0c99f177dce8acd9669a371da6ba3"><span class=en-original lang=en>Once the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to
1369     true, the <span>event loop</span>'s <span title="task queue">task
1370     queues</span> must discard any further <span title=concept-task>tasks</span> that would be added to them (tasks
1371     already on the queue are unaffected unless otherwise
1372     specified). Effectively, once the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is true,
1373     timers stop firing, notifications for all pending asynchronous
1374     operations are dropped, etc.</span></p>
1375    
1376    
1377 wakaba 1.133
1378 wakaba 1.137 <h3 id="the-worker's-lifetime" class="no-ja-translation" data-ja-hash="74a0efe3050847567026cd8638e4d2d6"><span class=en-original lang=en><span class=secno>5.5 </span>The worker's lifetime</span></h3>
1379 wakaba 1.111
1380     <p class="has-ja-translation" data-ja-hash="15eb0638e0de7d0e159c1214c48ba569"><span class=en-original lang=en>Workers communicate with other workers and with <span title="browsing context">browsing contexts</span> through <span title="channel messaging">message channels</span> and their
1381     <code>MessagePort</code> objects.</span><span class=ja-translation lang=ja>労働者は、メッセージ通信路とその <code>MessagePort</code>
1382     オブジェクトを通じて、他の労働者や閲覧文脈と通信します。</span></p>
1383    
1384     <p class="no-ja-translation" data-ja-hash="2c7d1a4ce717326e596bad596f0fc0bb"><span class=en-original lang=en>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> <var title="">worker global
1385     scope</var> has a list of <dfn id="the-worker's-ports">the worker's ports</dfn>, which
1386     consists of all the <code>MessagePort</code> objects that are
1387     entangled with another port and that have one (but only one) port
1388     owned by <var title="">worker global scope</var>. This list includes
1389     <!--all the <code>MessagePort</code> objects that are in events
1390     pending in the <span>event loop</span>, as well as (commented out
1391     because in practice it makes no difference either way as far as I
1392     can tell, and it would be hard to strictly implement since these
1393     ports might not yet be across the thread boundary)--> the implicit
1394     <code>MessagePort</code> in the case of <a href=#dedicatedworkerglobalscope title=DedicatedWorkerGlobalScope>dedicated workers</a>.</span></p>
1395    
1396     <p class="no-ja-translation" data-ja-hash="1aeb90a4b706e7a9ff09953cd49aed7c"><span class=en-original lang=en>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of <dfn id="the-worker's-workers">the
1397     worker's workers</dfn>. Initially this list is empty; it is
1398     populated when the worker creates or obtains further workers.</span></p>
1399    
1400     <p class="no-ja-translation" data-ja-hash="065bd87a93010cf4e435c95f2e540af5"><span class=en-original lang=en>Finally, each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of
1401     <dfn id="the-worker's-documents">the worker's <code>Document</code>s</dfn>. Initially this list
1402     is empty; it is populated when the worker is created.</span></p>
1403    
1404     <p class="no-ja-translation" data-ja-hash="6a8fe8066ddde02f0b3e6e22079bbd7e"><span class=en-original lang=en>Whenever a <code>Document</code> <var title="">d</var> is <dfn id="add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">added to the
1405     worker's <code>Document</code>s</dfn>, the user agent must, for each
1406     worker in the list of <a href="#the-worker's-workers">the worker's workers</a> whose list
1407     of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> does not contain
1408     <var title="">d</var>, <a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's
1409     documents">add <var title="">d</var> to <var title="">q</var>'s
1410     <code>WorkerGlobalScope</code> owner's list of <span>the worker's
1411     <code>Document</code>s</span></a>.</span></p> <!-- suggestions welcome
1412     on making this sentence into understandable English -->
1413    
1414     <p class="no-ja-translation" data-ja-hash="c556389e6b192b4ac768940df1b3cffc"><span class=en-original lang=en>Whenever a <code>Document</code> object is <span title="discard a
1415     Document">discarded</span>, it must be removed from the list of
1416     <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> of each worker
1417     whose list contains that <code>Document</code>.</span></p>
1418    
1419     <p class="no-ja-translation" data-ja-hash="db482587a227e92fd91bc6be1c81ddb3"><span class=en-original lang=en>Given a <span>script's global scope</span> <var title="">o</var>
1420     when creating or obtaining a worker, the <dfn id=list-of-relevant-document-objects-to-add>list of relevant
1421     <code>Document</code> objects to add</dfn> depends on the type of
1422     <var title="">o</var>. If <var title="">o</var> is a
1423     <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object (i.e. if we are creating a
1424     nested worker), then the relevant <code>Document</code>s are the
1425     <code>Document</code>s that are in <var title="">o</var>'s own list
1426     of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a>. Otherwise, <var title="">o</var> is a <code>Window</code> object, and the relevant
1427     <code>Document</code> is just the <code>Document</code> that is the
1428     <span>active document</span> of the <code>Window</code> object <var title="">o</var>.</span></p>
1429    
1430     <hr><p class="no-ja-translation" data-ja-hash="ea771ae7f86ae7c85f1418763117fa28"><span class=en-original lang=en>A worker is said to be a <dfn id=permissible-worker>permissible worker</dfn> if its
1431     list of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> is not
1432     empty.</span></p>
1433    
1434     <p class="no-ja-translation" data-ja-hash="e7407e6349a298d2bf4d87d06d147420"><span class=en-original lang=en>A worker is said to be a <dfn id=protected-worker>protected worker</dfn> if it is a
1435     <a href=#permissible-worker>permissible worker</a> and either it has outstanding
1436     timers, database transactions, or network connections, or its list
1437     of <a href="#the-worker's-ports">the worker's ports</a> is not empty, or its
1438     <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> is actually a
1439     <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a
1440     shared worker).</span></p>
1441    
1442     <p class="no-ja-translation" data-ja-hash="1a7b06a4fed1c22378b6b6f6ca13ffc2"><span class=en-original lang=en>A worker is said to be an <dfn id=active-needed-worker>active needed worker</dfn> if any
1443     of the <code>Document</code> objects in <a href="#the-worker's-documents">the worker's
1444     <code>Document</code>s</a> are <span>fully active</span>.</span></p>
1445    
1446     <p class="no-ja-translation" data-ja-hash="4182e47a8cba3978170630845be09eed"><span class=en-original lang=en>A worker is said to be a <dfn id=suspendable-worker>suspendable worker</dfn> if it is
1447     not an <a href=#active-needed-worker>active needed worker</a> but it is a
1448     <a href=#permissible-worker>permissible worker</a>.</span></p>
1449    
1450    
1451 wakaba 1.137 <h3 id=processing-model class="has-ja-translation" data-ja-hash="4eeffb677544f6c8799408c6b9021b4c"><span class=en-original lang=en><span class=secno>5.6 </span>Processing model</span><span class=ja-translation lang=ja><span class=secno>5.6 </span>処理モデル</span></h3>
1452 wakaba 1.111
1453     <p class="no-ja-translation" data-ja-hash="c45c1611a5572d560022f94383f4daf7"><span class=en-original lang=en>When a user agent is to <dfn id=run-a-worker>run a worker</dfn> for a script with
1454     <span>URL</span> <var title="">url</var>, a browsing context <var title="">owner browsing context</var>, and with global scope <var title="">worker global scope</var>, it must run the following
1455     steps:</span></p>
1456    
1457     <ol><li>
1458    
1459     <p class="no-ja-translation" data-ja-hash="699e58187adc9ee37990500a66c83a8f"><span class=en-original lang=en>Create a completely separate and parallel execution environment
1460     (i.e. a separate thread or process or equivalent construct), and
1461     run the rest of these steps asynchronously in that context.</span></p>
1462    
1463     </li>
1464    
1465     <li><p class="no-ja-translation" data-ja-hash="d41742425aaafe5999e11ca90b26f088"><span class=en-original lang=en>If <var title="">worker global scope</var> is actually a
1466     <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a
1467     shared worker), and there are any <span title="relevant application
1468     cache">relevant application caches</span> that are identified by a
1469     manifest URL with the <span>same origin</span> as <var title="">url</var> and that have <var title="">url</var> as one of
1470     their entries, <em>not</em> excluding entries marked as <span title=concept-appcache-foreign>foreign</span>, then associate the
1471     <var title="">worker global scope</var> with the <span title=concept-appcache-selection>most appropriate application
1472     cache</span> of those that match.</span></li>
1473    
1474     <li>
1475    
1476     <p class="no-ja-translation" data-ja-hash="83920af54821d7c307267e9565d86ea3"><span class=en-original lang=en>Attempt to <span>fetch</span> the resource identified by <var title="">url</var>.</span></p>
1477    
1478 wakaba 1.112 <p class="no-ja-translation" data-ja-hash="26478052fa0ac3c2e89f64956f73b55f"><span class=en-original lang=en>If the attempt fails, or if the attempt involves any redirects
1479     to URIs that do not have the <span>same origin</span> as <var title="">url</var> (even if the final URI is at the <span>same
1480     origin</span> as the original <var title="">url</var>), then for
1481     each <code><a href=#worker>Worker</a></code> or <code><a href=#sharedworker>SharedWorker</a></code> object
1482     associated with <var title="">worker global scope</var>,
1483     <span>queue a task</span> to <span>fire a simple event</span>
1484     called <code title=event-error>error</code> at that
1485     object. Abort these steps.</span></p>
1486 wakaba 1.111
1487     <p class="no-ja-translation" data-ja-hash="a2c139226de4390d75b561512be824a7"><span class=en-original lang=en>If the attempt succeeds, then <a href=#decode-a-script-resource title="decode a script
1488     resource">decode the script resource</a> to obtain its <var title="">source</var>.</span></p>
1489    
1490     <p class="no-ja-translation" data-ja-hash="c880bce97c5a1aadccd8989fc4ec8551"><span class=en-original lang=en>Let <var title="">language</var> be JavaScript.</span></p>
1491    
1492     <p class="note has-ja-translation" data-ja-hash="5ba762159d9de3f8bd326fe0bcfac206"><span class=en-original lang=en>As with <code>script</code> elements, the MIME
1493     type of the script is ignored. Unlike with <code>script</code>
1494     elements, there is no way to override the type. It's always
1495     assumed to be JavaScript.</span><span class=ja-translation lang=ja><code>script</code> 要素と同様に、スクリプトの MIME 型は無視します。
1496     <code>script</code> 要素とは異なり、
1497     型を上書きする方法はありません。スクリプトは常に JavaScript
1498     と仮定します。</span></p> <!-- XXX people will complain about
1499     this. I guess we might want to examine the MIME type... -->
1500    
1501     </li>
1502    
1503     <li>
1504    
1505     <p class="no-ja-translation" data-ja-hash="604d3f52a6756f627f0e747b0d06e6ae"><span class=en-original lang=en>A new <span title=concept-script>script</span> is now
1506     created, as follows.</span></p>
1507    
1508     <p class="no-ja-translation" data-ja-hash="2dfcd0f76cde607de6cc88d70f390825"><span class=en-original lang=en>Create a new <span>script execution environment</span>
1509     set up as appropriate for the scripting language <var title="">language</var>.</span></p>
1510    
1511     <p class="no-ja-translation" data-ja-hash="fdf8b5f9ba18a31a8f48670142f51442"><span class=en-original lang=en>Parse/compile/initialize <var title="">source</var> using that
1512     <span>script execution environment</span>, as appropriate for <var title="">language</var>, and thus obtain a <span>list of code
1513     entry-points</span>; set the <i>initial code entry-point</i> to
1514     the entry-point for any executable code to be immediately run.</span></p>
1515    
1516     <p class="no-ja-translation" data-ja-hash="129927904de4572e52f5bc380711aa10"><span class=en-original lang=en>Set the <span>script's global object</span> to <var title="">worker global scope</var>.</span></p>
1517    
1518     <p class="no-ja-translation" data-ja-hash="02eeb9a0f925368a93666886c94bf9bf"><span class=en-original lang=en>Set the <span>script's browsing context</span> to <var title="">owner browsing context</var>.</span></p>
1519    
1520     <p class="no-ja-translation" data-ja-hash="104fe9ff67aec2141cd0733499cfef92"><span class=en-original lang=en>Set the <span>script's URL character encoding</span> to
1521     UTF-8. (This is just used for encoding non-ASCII characters in the
1522     query component of URLs.)</span></p>
1523    
1524     <p class="no-ja-translation" data-ja-hash="7570c80d1bbf45f73eb74befed51740d"><span class=en-original lang=en>Set the <span>script's base URL</span> to <var title="">url</var>.</span></p>
1525    
1526     </li>
1527    
1528     <li>
1529    
1530     <p class="no-ja-translation" data-ja-hash="6ae721aad21a83f4d53f37c8e20baaf4"><span class=en-original lang=en><strong>Closing orphan workers</strong>: Start monitoring the
1531     worker such that no sooner than it stops being either a
1532     <a href=#protected-worker>protected worker</a> or a <a href=#suspendable-worker>suspendable
1533     worker</a>, and no later than it stops being a
1534     <a href=#permissible-worker>permissible worker</a>, <var title="">worker global
1535     scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
1536     to true<!-- v2-onclose and <span title="queue a task">a task is
1537     queued</span> to <span>fire a simple event</span> called <code
1538     title="event-close">close</code> at <var title="">worker global
1539     scope</var>-->.</span></p>
1540    
1541     </li>
1542    
1543     <li>
1544    
1545     <p class="no-ja-translation" data-ja-hash="24a8fa04f32239e0dafc1e98e466d6b4"><span class=en-original lang=en><strong>Suspending workers</strong>: Start monitoring the
1546     worker, such that whenever <var title="">worker global
1547     scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is false
1548     and the worker is a <a href=#suspendable-worker>suspendable worker</a>, the user
1549     agent suspends execution of script in that worker until such time
1550     as either the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag switches
1551     to true or the worker stops being a <a href=#suspendable-worker>suspendable
1552     worker</a>.</span></p>
1553    
1554     </li>
1555    
1556     <li>
1557    
1558     <p class="no-ja-translation" data-ja-hash="4321156bbce7d4613215c6cd962a1dc4"><span class=en-original lang=en><span title="jump to a code entry-point">Jump</span> to the
1559     <span title=concept-script>script</span>'s <i>initial code
1560     entry-point</i>, and let that run until it either returns, fails
1561     to catch an exception, or gets prematurely aborted by the
1562     "<a href=#kill-a-worker>kill a worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>"
1563     algorithms defined below.</span></p>
1564    
1565     <p class="note no-ja-translation" data-ja-hash="72d51fd74daed6be35c6217a615ae065"><span class=en-original lang=en>If the script gets aborted by the "<a href=#kill-a-worker>kill a
1566     worker</a>" algorithm, then that same algorithm will cause
1567     there to only be a single <span title=concept-task>task</span>
1568     in the <span>event loop</span> at the next step, namely the task
1569     for the <code title=message-close>close</code> event. The
1570     "<a href=#terminate-a-worker>terminate a worker</a>" algorithm removes all the
1571     events.</span></p>
1572    
1573     </li>
1574    
1575     <li><p class="no-ja-translation" data-ja-hash="cfc4a3473c7cde1f5a4133c349682bab"><span class=en-original lang=en>If <var title="">worker global scope</var> is actually a
1576     <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the worker is
1577     a dedicated worker), then enable the <span>port message
1578     queue</span> of the worker's implicit port.</span></li>
1579    
1580     <li>
1581    
1582     <p class="no-ja-translation" data-ja-hash="ac8f871c5ad85c37527bc69c91141970"><span class=en-original lang=en><i title="">Event loop</i>: Wait until either there is a <span title=concept-task>task</span> in one of the <span>event
1583     loop</span>'s <span title="task queue">task queues</span> or <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
1584     to true.</span></p>
1585    
1586     </li>
1587    
1588     <li>
1589    
1590     <p class="no-ja-translation" data-ja-hash="bcc803e78dd6f07ff20eaa1ca0d23303"><span class=en-original lang=en>Run the oldest task on one of the <span>event loop</span>'s
1591     <span title="task queue">task queues</span>, if any. The user
1592     agent may pick any <span>task queue</span>.</span></p>
1593    
1594     <p class="note no-ja-translation" data-ja-hash="2a401c207ed88f5206b2eb8a90fc91a6"><span class=en-original lang=en>The handling of events or the execution of
1595     callbacks might get prematurely aborted by the "<a href=#kill-a-worker>kill a
1596     worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>" algorithms
1597     defined below.</span></p>
1598    
1599     </li>
1600    
1601     <li>
1602    
1603     <p class="no-ja-translation" data-ja-hash="0a62cf7225c4d215f05940236b695d05"><span class=en-original lang=en>Remove the task run in the previous step, if any, from its
1604     <span>task queue</span>.</span></p>
1605    
1606     </li>
1607    
1608     <li>
1609    
1610     <p class="no-ja-translation" data-ja-hash="779764122a6b7c3177782cbb51d5c914"><span class=en-original lang=en>If there are any more events in the <span>event loop</span>'s
1611     <span title="task queue">task queues</span> or if <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
1612     to false, then jump back to the step above labeled <i>event
1613     loop</i>.</span></p>
1614    
1615     </li>
1616    
1617     <li>
1618    
1619     <p class="no-ja-translation" data-ja-hash="fb906768fcbbd4867b29825a7893fe6e"><span class=en-original lang=en>If there are any outstanding transactions that have callbacks
1620     that involve <span title=concept-script>scripts</span> whose
1621     <span title="script's global object">global object</span> is the
1622     <var title="">worker global scope</var>, roll them back (without
1623     invoking any of the callbacks).</span></p>
1624    
1625     </li>
1626    
1627     <li>
1628    
1629     <p class="no-ja-translation" data-ja-hash="77a63b1af244b3bfda62ba8d7bf76ea9"><span class=en-original lang=en>Empty the <var title="">worker global scope</var>'s <span>list
1630     of active timeouts</span> and its <span>list of active
1631     intervals</span>.</span></p>
1632    
1633     </li>
1634    
1635     <!-- v2-onclose
1636     <li>
1637    
1638     <p class="no-ja-translation" data-ja-hash="4cd03dfffdcf4808bf404c9bf5107eff"><span class=en-original lang=en>For each <code>Worker</code> or <code>SharedWorker</code>
1639     object associated with <var title="">worker global scope</var>,
1640     <span>queue a task</span> to <span>fire a simple event</span>
1641     called <code title="event-close">close</code> at that object.</span></p>
1642    
1643     </li>
1644     -->
1645     </ol><hr><p class="no-ja-translation" data-ja-hash="cd7920afdad85f0228b3501a68536c9a"><span class=en-original lang=en>When a user agent is to <dfn id=kill-a-worker>kill a worker</dfn> it must
1646     run the following steps in parallel with the worker's main loop (the
1647     "<a href=#run-a-worker>run a worker</a>" processing model defined above):</span></p>
1648    
1649     <ol><!-- v2-onclose
1650     <li><p class="no-ja-translation" data-ja-hash="6806774d3d9a55fb29d85301b3552ad6"><span class=en-original lang=en>If the worker's <code>WorkerGlobalScope</code> object's
1651     <span title="dom-WorkerGlobalScope-closing">closing</span> flag is
1652     false, <span>queue a task</span> to <span>fire a simple
1653     event</span> called <code title="event-close">close</code> at the
1654     worker's <code>WorkerGlobalScope</code> object.</span></p></li>
1655     --><li><p class="no-ja-translation" data-ja-hash="4cc11724db0ff9175e61747ac0b27285"><span class=en-original lang=en>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
1656     true.</span></li>
1657    
1658     <!-- v2-onclose
1659     <li><p class="no-ja-translation" data-ja-hash="4e3c7a6ff9a9f675020d75a10705eecc"><span class=en-original lang=en>Wait a user-agent-defined amount of time. If the "<span>run
1660     a worker</span>" processing model defined above immediately starts
1661     running event listeners registered for the <code
1662     title="event-close">close</code> event, this time should not be
1663     zero &mdash; the idea is that the <code
1664     title="event-close">close</code> event can be used to clean up
1665     when shutting down unexpectedly.</span></p></li>
1666     -->
1667    
1668     <li><p class="no-ja-translation" data-ja-hash="09b4e752d892d358db0eb9f001f5a26c"><span class=en-original lang=en>If there are any <span title=concept-task>tasks</span>
1669     queued in the <span>event loop</span>'s <span title="task
1670     queue">task queues</span><!-- v2-onclose other than the <code
1671     title="event-close">close</code> event that this algorithm just
1672     added-->, discard them without processing them.</span></li>
1673    
1674     <!-- v2-onclose
1675     <li><p class="no-ja-translation" data-ja-hash="f62a56e5aab0f0d08a9fa1e63f1983c5"><span class=en-original lang=en>If the <code title="event-close">close</code> event that
1676     this algorithm just queued hasn't yet been dispatched, then abort
1677     the script currently running in the worker.</span></p></li>
1678     -->
1679    
1680     <li><p class="has-ja-translation" data-ja-hash="a53f0acde0e4a21781c4b31d5a0f110a"><span class=en-original lang=en>Wait a user-agent-defined amount of time.</span><span class=ja-translation lang=ja>利用者エージェント定義の時間、待ちます。</span></li>
1681    
1682     <li><p class="no-ja-translation" data-ja-hash="fbb7fecc04423fb209634e5473bd7ec1"><span class=en-original lang=en>Abort the script currently running in the worker<!--
1683     v2-onclose (if any script is running, then it will be a handler for
1684     the <code title="event-close">close</code> event)-->.</span></li>
1685    
1686     </ol><p class="no-ja-translation" data-ja-hash="065b6253058d6c118693257b76ed3444"><span class=en-original lang=en>User agents may invoke the "<a href=#kill-a-worker>kill a worker</a>"
1687     processing model on a worker at any time, e.g. in response to user
1688     requests, in response to CPU quota management, or when a worker
1689     stops being an <a href=#active-needed-worker>active needed worker</a> if the worker
1690     continues executing even after its <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag was
1691     set to true.</span></p>
1692    
1693     <hr><p class="no-ja-translation" data-ja-hash="af2a7479f3a6fc4f418bd8e7255c63be"><span class=en-original lang=en>When a user agent is to <dfn id=terminate-a-worker>terminate a worker</dfn> it must run
1694     the following steps in parallel with the worker's main loop (the
1695     "<a href=#run-a-worker>run a worker</a>" processing model defined above):</span></p>
1696    
1697     <ol><li><p class="no-ja-translation" data-ja-hash="4cc11724db0ff9175e61747ac0b27285"><span class=en-original lang=en>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's
1698     <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
1699     true.</span></li>
1700    
1701     <li><p class="no-ja-translation" data-ja-hash="a9cf50df3de2e3788a3125ace8cf61f5"><span class=en-original lang=en>If there are any <span title=concept-task>tasks</span>
1702     queued in the <span>event loop</span>'s <span title="task
1703     queue">task queues</span>, discard them without processing
1704     them.</span></li>
1705    
1706     <li><p class="has-ja-translation" data-ja-hash="fcb471f3c8cace3a86095dcb29d25515"><span class=en-original lang=en>Abort the script currently running in the worker.</span><span class=ja-translation lang=ja>労働者中で現在走っているスクリプトを停止します。</span></li>
1707    
1708     <li><p class="no-ja-translation" data-ja-hash="533246b74ff40190332c8ca473d635b5"><span class=en-original lang=en>If the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object is
1709     actually a <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the
1710     worker is a dedicated worker), then empty the <span>port message
1711     queue</span> of the port that the worker's implicit port is
1712     entangled with.</span></li>
1713    
1714 wakaba 1.133 </ol><hr><p class="no-ja-translation" data-ja-hash="232ca3945fb57a3baa9cc0675ff99caa"><span class=en-original lang=en>The <span>task source</span> for the tasks mentioned above is the
1715     <span>DOM manipulation task source</span>.</span></p>
1716    
1717    
1718 wakaba 1.137 <h3 id=runtime-script-errors class="has-ja-translation" data-ja-hash="eb260f04266c3b94080b5c3f88c55a31"><span class=en-original lang=en><span class=secno>5.7 </span>Runtime script errors</span><span class=ja-translation lang=ja><span class=secno>5.7 </span>実行時スクリプト誤り</span></h3>
1719 wakaba 1.111
1720 wakaba 1.137 <p class="no-ja-translation" data-ja-hash="7bd3f1cdf85033908e9608a3f27fc9d1"><span class=en-original lang=en>Whenever an uncaught runtime script error occurs in one of the
1721     worker's scripts, if the error did not occur while handling a
1722     previous script error, the user agent must <span>report the
1723     error</span> using the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <code title=handler-WorkerGlobalScope-onerror><a href=#handler-workerglobalscope-onerror>onerror</a></code>
1724     attribute. <a href=#refsHTML5>[HTML5]</a></span></p>
1725 wakaba 1.111
1726 wakaba 1.137 <p class="no-ja-translation" data-ja-hash="1d4d18d12610442bca7072503caba230"><span class=en-original lang=en>For shared workers, if the error is still <i title=concept-error-nothandled>not handled</i> afterwards, or if
1727 wakaba 1.120 the error occurred while handling a previous script error, the error
1728 wakaba 1.137 should be reported to the user. <a href=#refsHTML5>[HTML5]</a></span></p>
1729 wakaba 1.111
1730 wakaba 1.120 <p class="no-ja-translation" data-ja-hash="44fbeda15b001a0dc82fe40089bb81bb"><span class=en-original lang=en>For dedicated workers, if the error is still <i title=concept-error-nothandled>not handled</i> afterwards, or if
1731     the error occurred while handling a previous script error, the user
1732 wakaba 1.111 agent must <span>queue a task</span> to <a href=#fire-a-worker-error-event>fire a worker error
1733     event</a> at the <code><a href=#worker>Worker</a></code> object associated with the
1734     worker.</span></p>
1735    
1736     <p class="no-ja-translation" data-ja-hash="c96676fcc4ab90893eca070f70c76249"><span class=en-original lang=en>When the user agent is to <dfn id=fire-a-worker-error-event>fire a worker error event</dfn> at
1737     a <code><a href=#worker>Worker</a></code> object, it must dispatch an event that uses
1738     the <code><a href=#errorevent>ErrorEvent</a></code> interface, with the name <code title=event-error>error</code>, that doesn't bubble and is
1739     cancelable, with its <code title=dom-ErrorEvent-message><a href=#dom-errorevent-message>message</a></code>, <code title=dom-ErrorEvent-filename><a href=#dom-errorevent-filename>filename</a></code>, and <code title=dom-ErrorEvent-lineno><a href=#dom-errorevent-lineno>lineno</a></code> attributes set
1740     appropriately. The default action of this event depends on whether
1741     the <code><a href=#worker>Worker</a></code> object is itself in a worker. If it is, and
1742     that worker is also a dedicated worker, then the user agent must
1743     again <span>queue a task</span> to <a href=#fire-a-worker-error-event>fire a worker error
1744     event</a> at the <code><a href=#worker>Worker</a></code> object associated with
1745     <em>that</em> worker. Otherwise, then the error should be reported
1746     to the user.</span></p>
1747    
1748 wakaba 1.133 <p class="no-ja-translation" data-ja-hash="232ca3945fb57a3baa9cc0675ff99caa"><span class=en-original lang=en>The <span>task source</span> for the tasks mentioned above is the
1749     <span>DOM manipulation task source</span>.</span></p>
1750    
1751 wakaba 1.111 <hr><pre class="idl no-ja-translation" data-ja-hash="b54be6bb73d5cd3a8a7bdcf79caf2a73"><span class=en-original lang=en>interface <dfn id=errorevent>ErrorEvent</dfn> : Event {
1752     readonly attribute DOMObject <a href=#dom-errorevent-message title=dom-ErrorEvent-message>message</a>;
1753     readonly attribute DOMObject <a href=#dom-errorevent-filename title=dom-ErrorEvent-filename>filename</a>;
1754     readonly attribute unsigned long <a href=#dom-errorevent-lineno title=dom-ErrorEvent-lineno>lineno</a>;
1755     void <a href=#dom-errorevent-initerrorevent title=dom-ErrorEvent-initErrorEvent>initErrorEvent</a>(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in DOMObject messageArg, in DOMObject filenameArg, in unsigned long linenoArg);
1756     void <a href=#dom-errorevent-initerroreventns title=dom-ErrorEvent-initErrorEventNS>initErrorEventNS</a>(in DOMString namespaceURIArg, in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in DOMObject messageArg, in DOMObject filenameArg, in unsigned long linenoArg);
1757     };</span></pre>
1758    
1759     <p class="has-ja-translation" data-ja-hash="33aa65558573be92301ab9449fabe341" data-ja-real-hash="97eaa7ff6843ee05db89a132a3a281fc"><span class=en-original lang=en>The <dfn id="en-dom-errorevent-initerrorevent" title=dom-ErrorEvent-initErrorEvent><code>initErrorEvent()</code></dfn>
1760     and <dfn id="en-dom-errorevent-initerroreventns" title=dom-ErrorEvent-initErrorEventNS><code>initErrorEventNS()</code></dfn>
1761     methods must initialize the event in a manner analogous to the
1762     similarly-named methods in the DOM3 Events interfaces. <a href=#refsDOM3EVENTS>[DOM3EVENTS]</a></span><span class=ja-translation lang=ja><dfn id=dom-errorevent-initerrorevent
1763     title=dom-ErrorEvent-initErrorEvent><code>initErrorEvent()</code></dfn>
1764     メソッドと <dfn id=dom-errorevent-initerroreventns
1765     title=dom-ErrorEvent-initErrorEventNS><code>initMessageEventNS()</code></dfn>
1766     メソッドは、 DOM3 事象界面の似たような名前のメソッドと同じような方法で事象を初期化しなければ<em class=rfc2119 title="MUST">なりません</em>。
1767     <a
1768     href=#refsDOM3EVENTS>[DOM3EVENTS]</a></span></p>
1769    
1770     <p class="no-ja-translation" data-ja-hash="c3d08d500554faa699d875e3015209b9"><span class=en-original lang=en>The <dfn id=dom-errorevent-message title=dom-ErrorEvent-message><code>message</code></dfn>
1771     attribute represents the error message.</span></p>
1772    
1773 wakaba 1.120 <p class="no-ja-translation" data-ja-hash="27affe597e932e64fc4db85fad27e91b"><span class=en-original lang=en>The <dfn id=dom-errorevent-filename title=dom-ErrorEvent-filename><code>filename</code></dfn>
1774 wakaba 1.111 attribute represents the <span>absolute URL</span> of the script in
1775 wakaba 1.120 which the error originally occurred.</span></p>
1776 wakaba 1.111
1777 wakaba 1.120 <p class="no-ja-translation" data-ja-hash="4322851b5483408bad81570533bf6251"><span class=en-original lang=en>The <dfn id=dom-errorevent-lineno title=dom-ErrorEvent-lineno><code>lineno</code></dfn>
1778     attribute represents the line number where the error occurred in the
1779 wakaba 1.111 script.</span></p>
1780    
1781    
1782    
1783 wakaba 1.137 <h3 id=creating-workers class="has-ja-translation" data-ja-hash="f0a4732d38d01e3d103b68468f9fe234"><span class=en-original lang=en><span class=secno>5.8 </span>Creating workers</span><span class=ja-translation lang=ja><span class=secno>5.8 </span>労働者の作成</span></h3>
1784 wakaba 1.111
1785 wakaba 1.137 <h4 id=the-abstractworker-abstract-interface class="has-ja-translation" data-ja-hash="fe5227371e801f4ac588d0d07472a900" data-ja-real-hash="fea226dea005bb8238586cd20b34aa2f"><span class=en-original lang=en><span class=secno>5.8.1 </span>The <code><a href=#abstractworker>AbstractWorker</a></code> abstract interface</span><span class=ja-translation lang=ja><span class=secno>5.8.1 </span><code><a href=#abstractworker>AbstractWorker</a></code> 抽象界面</span></h4>
1786 wakaba 1.111
1787 wakaba 1.137 <pre class="idl no-ja-translation" data-ja-hash="84c84199da6cc07390dbf49ed3f9a34c"><span class=en-original lang=en>interface <dfn id=abstractworker>AbstractWorker</dfn> {
1788     attribute <span>Function</span> <a href=#handler-abstractworker-onerror title=handler-AbstractWorker-onerror>onerror</a>;
1789     <!-- v2-onclose attribute <span>Function</span> <span title="handler-AbstractWorker-onclose">onclose</span>; -->
1790 wakaba 1.111 };</span></pre>
1791    
1792     <p class="no-ja-translation" data-ja-hash="b6a7afc5ececf4988bace69746cd2a40"><span class=en-original lang=en>Objects implementing the <code><a href=#abstractworker>AbstractWorker</a></code> interface
1793     must also implement the <code>EventTarget</code> interface.</span></p>
1794    
1795     <p class="no-ja-translation" data-ja-hash="94f7748c361254422af5d1ae954849ee"><span class=en-original lang=en>The following are the <span>event handler attributes</span> (and their corresponding <span title="event handler event type">event handler event types</span>)
1796     that must be supported, as DOM attributes, by objects implementing
1797     the <code><a href=#abstractworker>AbstractWorker</a></code> interface:</span></p>
1798    
1799     <table><thead><tr><th class="no-ja-translation" data-ja-hash="c85726f0c6ba202006ec1f912e68aa76"><span class=en-original lang=en><span title="event handler attributes">event handler attribute</span> </span><th class="no-ja-translation" data-ja-hash="3fc98eebba71602c62d8b2fd74645dc9"><span class=en-original lang=en><span>Event handler event type</span>
1800     </span><tbody><tr><td class="no-ja-translation" data-ja-hash="797655c7ba76af81be91c1f52bf92e5d"><span class=en-original lang=en><dfn id=handler-abstractworker-onerror title=handler-AbstractWorker-onerror><code>onerror</code></dfn> </span><td class="no-ja-translation" data-ja-hash="bf1b78c16e7c3a3de662d83f487bffff"><span class=en-original lang=en> <code title=event-error>error</code>
1801     <!-- v2-onclose --></span><!--<tr><td class="no-ja-translation" data-ja-hash="5bacdeaff60366f7971634c5de89cc1a"><span class=en-original lang=en><dfn title="handler-AbstractWorker-onclose"><code>onclose</code></dfn> </span><td class="no-ja-translation" data-ja-hash="e899358e829911a25c083ed9bc6519e6"><span class=en-original lang=en> <code title="event-close">close</code> -->
1802 wakaba 1.137 </span></table><h4 id=dedicated-workers-and-the-worker-interface class="no-ja-translation" data-ja-hash="4d0010617afd55731512f81d11e29921"><span class=en-original lang=en><span class=secno>5.8.2 </span>Dedicated workers and the <code><a href=#worker>Worker</a></code> interface</span></h4>
1803 wakaba 1.111
1804 wakaba 1.137 <pre class="idl no-ja-translation" data-ja-hash="9c4c196b6f61f55c60aeda624d393d78"><span class=en-original lang=en>[<a href=#dom-worker title=dom-Worker>Constructor</a>(in DOMString scriptURL)]
1805 wakaba 1.111 interface <dfn id=worker>Worker</dfn> : <a href=#abstractworker>AbstractWorker</a> {
1806     void <a href=#dom-worker-terminate title=dom-Worker-terminate>terminate</a>();
1807    
1808     void <a href=#dom-worker-postmessage title=dom-Worker-postMessage>postMessage</a>(in any message, [Optional] in <span>MessagePortArray</span> ports);<!--
1809     <span>MessagePort</span> <span title="dom-Worker-startConversation">startConversation</span>(in any message);-->
1810 wakaba 1.137 attribute <span>Function</span> <a href=#handler-worker-onmessage title=handler-Worker-onmessage>onmessage</a>;
1811 wakaba 1.111 };</span></pre>
1812    
1813     <p class="no-ja-translation" data-ja-hash="c01e50cb895f4eaa527128e73934b76c"><span class=en-original lang=en>The <dfn id=dom-worker-terminate title=dom-Worker-terminate><code>terminate()</code></dfn> method,
1814     when invoked, must cause the "<a href=#terminate-a-worker>terminate a worker</a>"
1815     algorithm to be run on the worker with with the object is
1816     associated.</span></p>
1817    
1818     <p class="no-ja-translation" data-ja-hash="f306158a0574a5376130b398642a9bc3"><span class=en-original lang=en><code><a href=#worker>Worker</a></code> objects act as if they had an implicit
1819     <code>MessagePort</code> associated with them. This port is part of
1820     a channel that is set up when the worker is created, but it is not
1821     exposed. This object must never be garbage collected before the
1822     <code><a href=#worker>Worker</a></code> object.</span></p>
1823    
1824     <p class="no-ja-translation" data-ja-hash="3347b0248a16085b3e8a073aed81f1d8"><span class=en-original lang=en>All messages received by that port must immediately be retargeted
1825     at the <code><a href=#worker>Worker</a></code> object.</span></p>
1826    
1827     <p class="no-ja-translation" data-ja-hash="58e82dfd8fd30e4340d6d1f7f7a08239"><span class=en-original lang=en>The <dfn id=dom-worker-postmessage title=dom-Worker-postMessage><code>postMessage()</code></dfn><!--
1828     and <dfn
1829     title="dom-Worker-startConversation"><code>startConversation()</code></dfn>-->
1830     method<!--s (startConversation)--> on <code><a href=#worker>Worker</a></code> objects
1831     must act as if, when invoked, it<!--/they (startConversation)-->
1832     immediately invoked the method of the same name on the port, with
1833     the same arguments, and returned the same return value.</span></p>
1834    
1835     <p class="no-ja-translation" data-ja-hash="e9b0de1981a1ae0a443580d68868219a"><span class=en-original lang=en>The following are the <span>event handler attributes</span> (and their corresponding <span title="event handler event type">event handler event types</span>)
1836     that must be supported, as DOM attributes, by objects implementing
1837     the <code><a href=#worker>Worker</a></code> interface:</span></p>
1838    
1839     <table><thead><tr><th class="no-ja-translation" data-ja-hash="c85726f0c6ba202006ec1f912e68aa76"><span class=en-original lang=en><span title="event handler attributes">event handler attribute</span> </span><th class="no-ja-translation" data-ja-hash="3fc98eebba71602c62d8b2fd74645dc9"><span class=en-original lang=en><span>Event handler event type</span>
1840     </span><tbody><tr><td class="no-ja-translation" data-ja-hash="936f67c1111af9460db35858624e3ce9"><span class=en-original lang=en><dfn id=handler-worker-onmessage title=handler-Worker-onmessage><code>onmessage</code></dfn> </span><td class="no-ja-translation" data-ja-hash="fe07e2527bf13c457386ab4807af84a0"><span class=en-original lang=en> <code title=event-message>message</code>
1841     </span></table><hr><p class="no-ja-translation" data-ja-hash="071022f5c10c547e44e7e3a998659333"><span class=en-original lang=en>When the <dfn id=dom-worker title=dom-Worker><code>Worker(<var title="">scriptURL</var>)</code></dfn> constructor is invoked, the
1842     user agent must run the following steps:</span></p>
1843    
1844 wakaba 1.121 <ol><li><p class="no-ja-translation" data-ja-hash="2ca4870c8239974ba241fd037e090c44"><span class=en-original lang=en><span title="resolve a url">Resolve</span> the <var title="">scriptURL</var> argument relative to the <span>first
1845     script</span>'s <span title="script's base URL">base URL</span>,
1846     when the method is invoked.</span></li>
1847 wakaba 1.111
1848     <li><p class="has-ja-translation" data-ja-hash="160444b5a61c1e71f39825a01936237f"><span class=en-original lang=en>If this fails, throw a <code>SYNTAX_ERR</code>
1849     exception.</span><span class=ja-translation lang=ja>これが失敗した場合、 <code>SYNTAX_ERR</code>
1850     例外を投げます。</span></li>
1851    
1852     <li><p class="no-ja-translation" data-ja-hash="8c1bc8b7160649d18a3c7780560d2b6d"><span class=en-original lang=en>If the <span>origin</span> of the resulting <span>absolute
1853     URL</span> is not the <span title="same origin">same</span> as the
1854     origin of the <span title=concept-script>script</span> that
1855     invoked the constructor, then throw a <span>security
1856     exception</span>.</span></li>
1857    
1858     <li><p class="no-ja-translation" data-ja-hash="b5bddf55144f8b1ff3c2a755b8ada3e0"><span class=en-original lang=en><span>Create a new <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code>
1859     object</span>. Let <var title="">worker global scope</var> be this
1860     new object.</span></li>
1861    
1862     <li><p class="no-ja-translation" data-ja-hash="5f11902e2367f64698f9d31e03a9d235"><span class=en-original lang=en>Create a new <code><a href=#worker>Worker</a></code> object, associated with
1863     <var title="">worker global scope</var>. Let <var title="">worker</var> be this new object.</span></li>
1864    
1865     <li><p class="no-ja-translation" data-ja-hash="7b066bb31c499860c38db05cac15b6b9"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned
1866     by the <span title="script's global scope">global scope</span> of
1867     the <span title=concept-script>script</span> that invoked the
1868     constructor. Let this be the <var title="">outside
1869     port</var>.</span></li>
1870    
1871     <li><p class="has-ja-translation" data-ja-hash="91024eaaebdc23ea683ace1b3e316962"><span class=en-original lang=en>Associate the <var title="">outside port</var> with <var title="">worker</var>.</span><span class=ja-translation lang=ja><var title="">outside port</var> を <var
1872     title="">worker</var> に関連付けます。</span></li>
1873    
1874     <li><p class="no-ja-translation" data-ja-hash="2d1b035dbaad3feca57eb124d161b034"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned
1875     by <var title="">worker global scope</var>. Let <var title="">inside port</var> be this new object.</span></li>
1876    
1877     <li><p class="no-ja-translation" data-ja-hash="c7df111ebbfeab4bffdbe80d19fdb0ba"><span class=en-original lang=en>Associate <var title="">inside port</var> with <var title="">worker global scope</var>.</span></li>
1878    
1879     <li><p class="no-ja-translation" data-ja-hash="bf2642ced659847cb4402165d2ab3a8e"><span class=en-original lang=en><span>Entangle</span> <var title="">outside port</var> and
1880     <var title="">inside port</var>.</span></li>
1881    
1882     <li><p class="has-ja-translation" data-ja-hash="2c5bd80faeda34c67a2533f32a477c51"><span class=en-original lang=en>Return <var title="">worker</var>, and run the following
1883     steps asynchronously.</span><span class=ja-translation lang=ja><var title="">worker</var> を返し、以降の段階を非同期に走らせます。</span></li>
1884    
1885     <li><p class="no-ja-translation" data-ja-hash="486f13bccfc4521d81f95f8a83a34838"><span class=en-original lang=en>Enable <var title="">inside port</var>'s <span>port message
1886     queue</span>.</span></li>
1887    
1888     <li><p class="no-ja-translation" data-ja-hash="f226f14fb6f714ae0ebb2e1d19b80cb0"><span class=en-original lang=en>Enable <var title="">outside port</var>'s <span>port message
1889     queue</span>.</span></li>
1890    
1891     <li>
1892    
1893     <p class="no-ja-translation" data-ja-hash="55e6e7d35bf5d3d20aefe01d055f5e6b"><span class=en-original lang=en>Let <var title="">docs</var> be the <a href=#list-of-relevant-document-objects-to-add>list of relevant
1894     <code>Document</code> objects to add</a> given the <span title="script's global scope">global scope</span> of the <span title=concept-script>script</span> that invoked the
1895     constructor.</span></p>
1896    
1897     </li>
1898    
1899     <li>
1900    
1901     <p class="no-ja-translation" data-ja-hash="55e64a61fc96598db79195cddb4bb2f9"><span class=en-original lang=en><a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">Add to
1902     <var title="">worker global scope</var>'s list of <span>the
1903     worker's <code>Document</code>s</span></a> the
1904     <code>Document</code> objects in <var title="">docs</var>.</span></p>
1905    
1906     </li>
1907    
1908     <li>
1909    
1910     <p class="no-ja-translation" data-ja-hash="7c3d95cd57d78baee3024bef7b2b71f6"><span class=en-original lang=en>If the <span title="script's global scope">global scope</span>
1911     of the <span title=concept-script>script</span> that invoked the
1912     constructor is a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object (i.e. we
1913     are creating a nested worker), add <var title="">worker global
1914     scope</var> to the list of <a href="#the-worker's-workers">the worker's workers</a> of the
1915     <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object that is the <span title="script's global scope">global scope</span> of the <span title=concept-script>script</span> that invoked the
1916     constructor.</span></p>
1917    
1918     </li>
1919    
1920     <li>
1921    
1922     <p class="no-ja-translation" data-ja-hash="8d52f75615bdf14ecca1950ce2fe376b"><span class=en-original lang=en><a href=#run-a-worker>Run a worker</a> for the resulting <span>absolute
1923     URL</span>, with the <span>script browsing context</span> of the
1924     script that invoked the method as the <var title="">owner browsing
1925     context</var>, and with <var title="">worker global scope</var> as
1926     the global scope.</span></p>
1927    
1928     </li>
1929    
1930 wakaba 1.124 </ol><p class="no-ja-translation" data-ja-hash="62d6758eaf2020c4112ab186636f4f33"><span class=en-original lang=en>This constructor must be visible when the <span>script's global
1931     scope</span> is either a <code>Window</code> object or an object
1932     implementing the <code><a href=#workerutils>WorkerUtils</a></code> interface.</span></p>
1933    
1934    
1935 wakaba 1.137 <h4 id=shared-workers-and-the-sharedworker-interface class="no-ja-translation" data-ja-hash="3b77b75af8223662d0137a2dd84957ab"><span class=en-original lang=en><span class=secno>5.8.3 </span>Shared workers and the <code><a href=#sharedworker>SharedWorker</a></code> interface</span></h4>
1936 wakaba 1.111
1937     <pre class="idl no-ja-translation" data-ja-hash="f72ede7ba5104464a3b52f4315042c5d"><span class=en-original lang=en>[<a href=#dom-sharedworker title=dom-SharedWorker>Constructor</a>(in DOMString scriptURL, in DOMString name)]
1938     interface <dfn id=sharedworker>SharedWorker</dfn> : <a href=#abstractworker>AbstractWorker</a> {
1939     readonly attribute <span>MessagePort</span> <a href=#dom-sharedworker-port title=dom-SharedWorker-port>port</a>;
1940     };</span></pre>
1941    
1942     <p class="no-ja-translation" data-ja-hash="5cf4affd83f6594d8f8bc1a32f68ab35"><span class=en-original lang=en>The <dfn id=dom-sharedworker-port title=dom-SharedWorker-port><code>port</code></dfn>
1943     attribute must return the value it was assigned by the object's
1944     constructor. It represents the <code>MessagePort</code> for
1945     communicating with the shared worker.</span></p>
1946    
1947     <p class="no-ja-translation" data-ja-hash="a0ab2a2723152011df53c0fc544b493b"><span class=en-original lang=en>When the <dfn id=dom-sharedworker title=dom-SharedWorker><code>SharedWorker(<var title="">scriptURL</var>, <var title="">name</var>)</code></dfn>
1948     constructor is invoked, the user agent must run the following
1949     steps:</span></p>
1950    
1951     <ol><li><p class="has-ja-translation" data-ja-hash="3219e42f1040482201a693e248f580cb"><span class=en-original lang=en><span title="resolve a url">Resolve</span> the <var title="">scriptURL</var> argument.</span><span class=ja-translation lang=ja><var
1952     title="">scriptURL</var> 引数を<span title="resolve a url">解決</span>します。</span></li>
1953    
1954     <li><p class="has-ja-translation" data-ja-hash="160444b5a61c1e71f39825a01936237f"><span class=en-original lang=en>If this fails, throw a <code>SYNTAX_ERR</code>
1955     exception.</span><span class=ja-translation lang=ja>これが失敗した場合、 <code>SYNTAX_ERR</code>
1956     例外を投げます。</span></li>
1957    
1958     <li><p class="no-ja-translation" data-ja-hash="b087dd24bd7b57655bef9f719db30b9a"><span class=en-original lang=en>If the <span>origin</span> of the resulting <span>absolute
1959     URL</span> is not the <span title="same origin">same</span> as the
1960     origin of the script that invoked the constructor, then throw a
1961     <span>security exception</span>.</span></li>
1962    
1963     <li>
1964    
1965     <p class="no-ja-translation" data-ja-hash="55e6e7d35bf5d3d20aefe01d055f5e6b"><span class=en-original lang=en>Let <var title="">docs</var> be the <a href=#list-of-relevant-document-objects-to-add>list of relevant
1966     <code>Document</code> objects to add</a> given the <span title="script's global scope">global scope</span> of the <span title=concept-script>script</span> that invoked the
1967     constructor.</span></p>
1968    
1969     </li>
1970    
1971     <li>
1972    
1973     <p class="has-ja-translation" data-ja-hash="683a2c0080e014b9eae98b884ccaf7e4"><span class=en-original lang=en>Execute the following substeps atomically:</span><span class=ja-translation lang=ja>次の部分段階群を原子的に実行します。</span></p>
1974    
1975     <ol><li><p class="no-ja-translation" data-ja-hash="b38ef0f6a7b346d45c984332a0b8776d"><span class=en-original lang=en>Create a new <code><a href=#sharedworker>SharedWorker</a></code> object, which will
1976     shortly be associated with a <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code>
1977     object. Let this <code><a href=#sharedworker>SharedWorker</a></code> object be <var title="">worker</var>.</span></li>
1978    
1979     <li><p class="no-ja-translation" data-ja-hash="629bd7f10d8162f8dbf21128830192dc"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span>
1980     owned by the <span title="script's global scope">global
1981     scope</span> of the script that invoked the method. Let this be
1982     the <var title="">outside port</var>.</span></li>
1983    
1984     <li><p class="no-ja-translation" data-ja-hash="2945bc791092fa6a9100ef8df34f4c10"><span class=en-original lang=en>Assign <var title="">outside port</var> to the <code title=dom-SharedWorker-port><a href=#dom-sharedworker-port>port</a></code> attribute of <var title="">worker</var>.</span></li>
1985    
1986     <li>
1987    
1988     <p class="no-ja-translation" data-ja-hash="a5402d09db1c68d0e688bfc726bfb83a"><span class=en-original lang=en>If there exists a <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object
1989     whose <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a>
1990     flag is false, whose <code title=dom-WorkerGlobalScope-name>name</code> attribute is
1991     exactly equal to the <var title="">name</var> argument, and
1992     whose <code title=dom-WorkerGlobalScope-location><a href=#dom-workerglobalscope-location>location</a></code> attribute
1993     represents an <span>absolute URL</span> that has the <span>same
1994     origin</span> as the resulting <span>absolute URL</span>, then
1995     run these substeps:</span></p>
1996    
1997     <ol><li><p class="no-ja-translation" data-ja-hash="f7fe188afbd752dfa48eb004c7dadd66"><span class=en-original lang=en>Let <var title="">worker global scope</var> be that
1998     <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object.</span></li>
1999    
2000     <li><p class="no-ja-translation" data-ja-hash="313c7e6a97ecf9eceaccdf8015b78abe"><span class=en-original lang=en>If <var title="">worker global scope</var>'s <code title=dom-WorkerGlobalScope-location><a href=#dom-workerglobalscope-location>location</a></code>
2001     attribute represents an <span>absolute URL</span> that is not
2002     exactly equal to the resulting <span>absolute URL</span>, then
2003     throw a <code>URL_MISMATCH_ERR</code> exception and abort all
2004     these steps.</span></li>
2005    
2006     <li><p class="has-ja-translation" data-ja-hash="9c4f87efaa1e868cd6bf63dbffa749c0"><span class=en-original lang=en>Associate <var title="">worker</var> with <var title="">worker global scope</var>.</span><span class=ja-translation lang=ja><var title="">worker</var> を <var title="">worker
2007     global scope</var> に関連付けます。</span></li>
2008    
2009     <li><p class="no-ja-translation" data-ja-hash="bab9c8cea075e0f3614c731f09b49892"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span>
2010     owned by <var title="">worker global scope</var>. Let this
2011     be the <var title="">inside port</var>.</span></li>
2012    
2013     <li><p class="no-ja-translation" data-ja-hash="bf2642ced659847cb4402165d2ab3a8e"><span class=en-original lang=en><span>Entangle</span> <var title="">outside port</var>
2014     and <var title="">inside port</var>.</span></li>
2015    
2016     <li><p class="has-ja-translation" data-ja-hash="ebb713e9e29aab450d79b533c42b67ae"><span class=en-original lang=en>Return <var title="">worker</var> and perform the next
2017     step asynchronously.</span><span class=ja-translation lang=ja><var title="">worker</var> を返し、
2018     次の段階を非同期に実行します。</span></li>
2019    
2020     <li><p class="no-ja-translation" data-ja-hash="54fc802e5e886ae34c575b12f00dfb03"><span class=en-original lang=en>Create an event that uses the <code>MessageEvent</code>
2021     interface, with the name <code title=event-connect>connect</code>, which does not bubble, is
2022     not cancelable, has no default action, has a <code title=dom-MessageEvent-data>data</code> attribute whose value
2023     is the empty string and has a <code title=dom-MessageEvent-ports>ports</code> attribute whose
2024     value is an array containing only the newly created port, and
2025     <span>queue a task</span> to dispatch the event at <var title="">worker global scope</var>.</span></li>
2026    
2027     <li>
2028    
2029     <p class="no-ja-translation" data-ja-hash="55e64a61fc96598db79195cddb4bb2f9"><span class=en-original lang=en><a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">Add to
2030     <var title="">worker global scope</var>'s list of <span>the
2031     worker's <code>Document</code>s</span></a> the
2032     <code>Document</code> objects in <var title="">docs</var>.</span></p>
2033    
2034     </li>
2035    
2036     <li>
2037    
2038     <p class="no-ja-translation" data-ja-hash="71e9b593868deeebab7e077539f42964"><span class=en-original lang=en>If the <span title="script's global scope">global
2039     scope</span> of the <span title=concept-script>script</span>
2040     that invoked the constructor is a
2041     <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, add <var title="">worker global scope</var> to the list of <a href="#the-worker's-workers">the
2042     worker's workers</a> of the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>
2043     object that is the <span title="script's global scope">global
2044     scope</span> of the <span title=concept-script>script</span>
2045     that invoked the constructor.</span></p>
2046    
2047     </li>
2048    
2049     <li><p class="has-ja-translation" data-ja-hash="dd866391287c967d4799df78a7249911"><span class=en-original lang=en>Abort all these steps.</span><span class=ja-translation lang=ja>これらの段階をすべて停止します。</span></li>
2050    
2051     </ol></li>
2052    
2053     <li><p class="no-ja-translation" data-ja-hash="08b38f99ab8a1b8451edf6d12f8f60d9"><span class=en-original lang=en><span>Create a new <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code>
2054     object</span>. Let <var title="">worker global scope</var> be
2055     this new object.</span></li>
2056    
2057     <li><p class="has-ja-translation" data-ja-hash="9c4f87efaa1e868cd6bf63dbffa749c0"><span class=en-original lang=en>Associate <var title="">worker</var> with <var title="">worker global scope</var>.</span><span class=ja-translation lang=ja><var title="">worker</var> を <var title="">worker
2058     global scope</var> に関連付けます。</span></li>
2059    
2060     <li><p class="no-ja-translation" data-ja-hash="5197138b23b238d1ca44cd6260532c5d"><span class=en-original lang=en>Set the <code title=dom-SharedWorkerGlobalScope-name><a href=#dom-sharedworkerglobalscope-name>name</a></code> attribute of
2061     <var title="">worker global scope</var> to <var title="">name</var>.</span></li>
2062    
2063     <li><p class="no-ja-translation" data-ja-hash="2d1b035dbaad3feca57eb124d161b034"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span>
2064     owned by <var title="">worker global scope</var>. Let <var title="">inside port</var> be this new object.</span></li>
2065    
2066     <li><p class="no-ja-translation" data-ja-hash="bf2642ced659847cb4402165d2ab3a8e"><span class=en-original lang=en><span>Entangle</span> <var title="">outside port</var> and
2067     <var title="">inside port</var>.</span></li>
2068    
2069     </ol></li>
2070    
2071     <li><p class="no-ja-translation" data-ja-hash="8383fd384ab33b4860228f2c27483044"><span class=en-original lang=en>Return <var title="">worker</var> and perform the remaining
2072     steps asynchronously.</span></li>
2073    
2074     <li><p class="no-ja-translation" data-ja-hash="54fc802e5e886ae34c575b12f00dfb03"><span class=en-original lang=en>Create an event that uses the <code>MessageEvent</code>
2075     interface, with the name <code title=event-connect>connect</code>, which does not bubble, is not
2076     cancelable, has no default action, has a <code title=dom-MessageEvent-data>data</code> attribute whose value is
2077     the empty string and has a <code title=dom-MessageEvent-ports>ports</code> attribute whose value
2078     is an array containing only the newly created port, and <span>queue
2079     a task</span> to dispatch the event at <var title="">worker global
2080     scope</var>.</span></li>
2081    
2082     <li>
2083    
2084     <p class="no-ja-translation" data-ja-hash="55e64a61fc96598db79195cddb4bb2f9"><span class=en-original lang=en><a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">Add to
2085     <var title="">worker global scope</var>'s list of <span>the
2086     worker's <code>Document</code>s</span></a> the
2087     <code>Document</code> objects in <var title="">docs</var>.</span></p>
2088    
2089     </li>
2090    
2091     <li>
2092    
2093     <p class="no-ja-translation" data-ja-hash="71e9b593868deeebab7e077539f42964"><span class=en-original lang=en>If the <span title="script's global scope">global scope</span>
2094     of the <span title=concept-script>script</span> that invoked the
2095     constructor is a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, add <var title="">worker global scope</var> to the list of <a href="#the-worker's-workers">the
2096     worker's workers</a> of the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>
2097     object that is the <span title="script's global scope">global
2098     scope</span> of the <span title=concept-script>script</span>
2099     that invoked the constructor.</span></p>
2100    
2101     </li>
2102    
2103     <li>
2104    
2105     <p class="no-ja-translation" data-ja-hash="8d52f75615bdf14ecca1950ce2fe376b"><span class=en-original lang=en><a href=#run-a-worker>Run a worker</a> for the resulting <span>absolute
2106     URL</span>, with the <span>script browsing context</span> of the
2107     script that invoked the method as the <var title="">owner browsing
2108     context</var>, and with <var title="">worker global scope</var> as
2109     the global scope.</span></p>
2110    
2111     </li>
2112    
2113 wakaba 1.124 </ol><p class="no-ja-translation" data-ja-hash="62d6758eaf2020c4112ab186636f4f33"><span class=en-original lang=en>This constructor must be visible when the <span>script's global
2114     scope</span> is either a <code>Window</code> object or an object
2115     implementing the <code><a href=#workerutils>WorkerUtils</a></code> interface.</span></p>
2116 wakaba 1.133
2117     <p class="no-ja-translation" data-ja-hash="232ca3945fb57a3baa9cc0675ff99caa"><span class=en-original lang=en>The <span>task source</span> for the tasks mentioned above is the
2118     <span>DOM manipulation task source</span>.</span></p>
2119 wakaba 1.124
2120    
2121    
2122 wakaba 1.137 <h2 id=apis-available-to-workers class="has-ja-translation" data-ja-hash="4fce100e6a2eccbb2df8631a438feeb6"><span class=en-original lang=en><span class=secno>6 </span>APIs available to workers</span><span class=ja-translation lang=ja><span class=secno>6 </span>労働者が利用可能な API</span></h2>
2123 wakaba 1.111
2124 wakaba 1.124 <pre class="idl no-ja-translation" data-ja-hash="0eb2e0b476cfb37a2a7fa247b459c45c"><span class=en-original lang=en>[NoInterfaceObject, ImplementedOn=WorkerGlobalScope, Supplemental] interface <dfn id=workerutils>WorkerUtils</dfn> {
2125 wakaba 1.111 void <a href=#dom-workerglobalscope-importscripts title=dom-WorkerGlobalScope-importScripts>importScripts</a>([Variadic] in DOMString urls);
2126     readonly attribute <a href=#worker-navigator title=worker-Navigator>Navigator</a> <a href=#dom-worker-navigator title=dom-worker-navigator>navigator</a>;
2127     };</span></pre>
2128    
2129     <p class="has-ja-translation" data-ja-hash="fc1e0d30e2c0869e54fb2487a7dd6836" data-ja-real-hash="a9f04ef5503be39e966b5cc5744a3d1c"><span class=en-original lang=en>Objects that implement the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>
2130     interface must also implement the <code><a href=#workerutils>WorkerUtils</a></code>
2131     interface.</span><span class=ja-translation lang=ja><code><a href=#workerglobalscope>WorkerGlobalScope</a></code> 界面を実装するオブジェクトは、 <code><a href=#workerutils>WorkerUtils</a></code> 界面も実装しなければ<em class=rfc2119 title="MUST">なりません</em>。</span></p>
2132    
2133     <p class="no-ja-translation" data-ja-hash="66c8457f878286e5a4ecb06e2d847359"><span class=en-original lang=en>Objects that implement the <code><a href=#workerutils>WorkerUtils</a></code> interface
2134     must also implement the <code>WindowTimers</code> interface. (This
2135     interface provides the <code title="">setTimeout()</code> method and
2136     its friends.)</span></p><!-- XXX ref -->
2137    
2138     <!-- XXX ApplicationCache -->
2139    
2140     <!-- XXX debugging: void log(in DOMString s); // log to console -->
2141    
2142     <hr><p class="has-ja-translation" data-ja-hash="59b28734296c1cd390d156b0e8e5fb94"><span class=en-original lang=en>The DOM APIs (<code>Node</code> objects, <code>Document</code>
2143     objects, etc) are not available to workers in this version of this
2144     specification.</span><span class=ja-translation lang=ja>DOM API (<code>Node</code> オブジェクト、 <code>Document</code>
2145     オブジェクト、その他) は、この版のこの仕様書では労働者に利用可能ではありません。</span></p>
2146    
2147    
2148 wakaba 1.137 <h3 id=importing-scripts-and-libraries class="has-ja-translation" data-ja-hash="e7522d998689dc52be80feeff81470ca"><span class=en-original lang=en><span class=secno>6.1 </span>Importing scripts and libraries</span><span class=ja-translation lang=ja><span class=secno>6.1 </span>スクリプトとライブラリーの輸入</span></h3>
2149 wakaba 1.111
2150     <p class="no-ja-translation" data-ja-hash="66975403bb279c95f3527e7070d78341"><span class=en-original lang=en>When a script invokes the <dfn id=dom-workerglobalscope-importscripts title=dom-WorkerGlobalScope-importScripts><code>importScripts(<var title="">urls</var>)</code></dfn> method on a
2151     <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, the user agent must run the
2152     following steps:</span></p>
2153    
2154     <ol><li><p class="has-ja-translation" data-ja-hash="143a8bb07f4501807d2bbf2d2d2b345a"><span class=en-original lang=en>If there are no arguments, return without doing
2155     anything. Abort these steps.</span><span class=ja-translation lang=ja>引数がない場合、何も返さずに返ります。
2156     これらの段階を停止します。</span></li>
2157    
2158     <li><p class="has-ja-translation" data-ja-hash="b89818b453add85fbb5ec1e963e3072c"><span class=en-original lang=en><span title="resolve a url">Resolve</span> each
2159     argument.</span><span class=ja-translation lang=ja>各引数を<span title="resolve a url">解決</span>します。</span></li>
2160    
2161     <li><p class="has-ja-translation" data-ja-hash="54adea3a3a07dd8833ad87eb937142f1"><span class=en-original lang=en>If any fail, throw a <code>SYNTAX_ERR</code>
2162     exception.</span><span class=ja-translation lang=ja>いずれかが失敗した場合、 <code>SYNTAX_ERR</code> 例外を投げます。</span></li>
2163    
2164     <!--
2165     <li><p class="has-ja-translation" data-ja-hash="952d7bd44378695378ddf1084a1c5347"><span class=en-original lang=en>If any of the resulting <span title="absolute URL">absolute
2166     URLs</span> have an <span>origin</span> that is not the <span
2167     title="same origin">same</span> as the origin of the script that
2168     invoked the method, then throw a <span>security
2169     exception</span>.</span><span class=ja-translation lang=ja>結果として得られた<span title="absolute URL">絶対
2170     URL</span>
2171     のいずれかが、メソッドを呼び出したスクリプトの<span>origin</span>と<span
2172     title="same origin">同じ</span>ではない起源を持つ場合、
2173     <span>保安性例外</span>を投げます。</span></p></li>
2174     -->
2175    
2176     <li>
2177    
2178     <p class="has-ja-translation" data-ja-hash="9a0a1930525c4231da8248d6b7847c8d"><span class=en-original lang=en>Attempt to <span>fetch</span> each resource identified by the
2179     resulting <span title="absolute URLs">absolute URL</span>.</span><span class=ja-translation lang=ja>結果として得られた<span title="absolute URLs">絶対 URL</span>
2180     によって識別される資源をそれぞれ<span>取得</span>しようと試みます。</span></p>
2181    
2182     </li>
2183    
2184     <li>
2185    
2186     <p class="has-ja-translation" data-ja-hash="4fc5f1898eb20e4c8da603b91c1ae884"><span class=en-original lang=en>For each argument in turn, in the order given, starting with
2187     the first one, run these substeps:</span><span class=ja-translation lang=ja>各引数について、与えられた順に最初のものから、次の部分段階群を走らせます。</span></p>
2188    
2189     <ol><li>
2190    
2191     <p class="has-ja-translation" data-ja-hash="a5cd8fb5d75985afdc62f7ac228329d4"><span class=en-original lang=en>Wait for the fetching attempt for the corresponding resource
2192     to complete.</span><span class=ja-translation lang=ja>対応する資源を取得しようとする試みが完了するのを待ちます。</span></p>
2193    
2194     <p class="no-ja-translation" data-ja-hash="c821b5a32a4316df06e95e2117d4d21a"><span class=en-original lang=en>If the fetching attempt failed, throw a
2195     <code>NETWORK_ERR</code> exception and abort all these
2196     steps.</span></p>
2197    
2198     <p class="no-ja-translation" data-ja-hash="a2c139226de4390d75b561512be824a7"><span class=en-original lang=en>If the attempt succeeds, then <a href=#decode-a-script-resource title="decode a script
2199     resource">decode the script resource</a> to obtain its <var title="">source</var>.</span></p>
2200    
2201     <p class="no-ja-translation" data-ja-hash="c880bce97c5a1aadccd8989fc4ec8551"><span class=en-original lang=en>Let <var title="">language</var> be JavaScript.</span></p>
2202    
2203     <p class="note has-ja-translation" data-ja-hash="9d495d7b0fa2439cfa3470c4af977171"><span class=en-original lang=en>As with the worker's script, the script here is
2204     always assumed to be JavaScript, regardless of the MIME
2205     type.</span><span class=ja-translation lang=ja>労働者のスクリプトと同じく、ここでのスクリプトも、 MIME 型に関わらず常に
2206     JavaScript であるとみなします。</span></p> <!-- XXX -->
2207    
2208     </li>
2209    
2210     <li>
2211    
2212     <p class="no-ja-translation" data-ja-hash="82bb5f7207d0f40963418cf33df6325b"><span class=en-original lang=en><span>Create a script</span>, using <var title="">source</var> as the script source and <var title="">language</var> as the scripting language, using the
2213     same global object, browsing context, character encoding, base
2214     URL, and script group as the <span title=concept-script>script</span> that was created by the
2215     worker's <a href=#run-a-worker>run a worker</a> algorithm.</span></p>
2216    
2217     <p class="no-ja-translation" data-ja-hash="160451bccc2829032bdfb4597231e9c2"><span class=en-original lang=en>Let the newly created <span title=concept-script>script</span> run until it either
2218     returns, fails to parse, fails to catch an exception, or gets
2219     prematurely aborted by the "<a href=#kill-a-worker>kill a worker</a>" or
2220     "<a href=#terminate-a-worker>terminate a worker</a>" algorithms defined above.</span></p>
2221    
2222     <p class="no-ja-translation" data-ja-hash="41014f4a697396a3e02475a4d61a7472"><span class=en-original lang=en>If it failed to parse, then throw a
2223     <code>SyntaxError</code><!-- XXX ref? --> exception and abort
2224     all these steps.</span></p>
2225    
2226     <p class="no-ja-translation" data-ja-hash="32f753089621a99745d3a6dde7c5aa8b"><span class=en-original lang=en>If an exception was raised or if the script was prematurely
2227     aborted, then abort all these steps, letting the exception or
2228     aborting continue to be processed by the script that called the
2229     <code title=dom-WorkerGlobalScope-importScripts><a href=#dom-workerglobalscope-importscripts>importScripts()</a></code>
2230     method.</span></p>
2231    
2232     <p class="no-ja-translation" data-ja-hash="f41de43eedf5733455078779b5f50c14"><span class=en-original lang=en>If the "<a href=#kill-a-worker>kill a worker</a>" or "<a href=#terminate-a-worker>terminate a
2233     worker</a>" algorithms abort the script then abort all these
2234     steps.</span></p>
2235    
2236     </li>
2237    
2238     </ol></li>
2239    
2240 wakaba 1.137 </ol><h3 id=the-navigator-object class="no-ja-translation" data-ja-hash="6a11027ebc14ad36700f251d60a84912"><span class=en-original lang=en><span class=secno>6.2 </span>The <code title=worker-Navigator><a href=#worker-navigator>Navigator</a></code> object</span></h3>
2241 wakaba 1.111
2242     <p class="no-ja-translation" data-ja-hash="b0a33e2b5cacd5c4c5725f370211c7f4"><span class=en-original lang=en>The <dfn id=dom-worker-navigator title=dom-worker-navigator><code>navigator</code></dfn> attribute
2243     of the <code><a href=#workerutils>WorkerUtils</a></code> interface must return an instance of
2244     the <code title=worker-Navigator><a href=#worker-navigator>Navigator</a></code> interface, which
2245     represents the identity and state of the user agent (the
2246     client):</span></p>
2247    
2248     <pre class="idl no-ja-translation" data-ja-hash="9903c3558c66ef46db40a21f226fd4df"><span class=en-original lang=en>interface <dfn id=worker-navigator title=worker-Navigator>Navigator</dfn> {
2249     // objects implementing this interface also implement the interfaces listed below
2250     };</span></pre>
2251    
2252 wakaba 1.113 <p class="no-ja-translation" data-ja-hash="dbe06bfc1f91cf3a24147e8d9884d17e"><span class=en-original lang=en>Objects implementing the <code title=worker-Navigator><a href=#worker-navigator>Navigator</a></code> interface must also
2253 wakaba 1.111 implement the <span>NavigatorID</span> and
2254 wakaba 1.113 <span>NavigatorOnLine</span> interfaces. <a href=#refsHTML5>[HTML5]</a></span></p>
2255 wakaba 1.111
2256 wakaba 1.113 <p class="note no-ja-translation" data-ja-hash="67986732437eb5b67c3e1bd21f1325a8"><span class=en-original lang=en>The <code title=worker-Navigator><a href=#worker-navigator>Navigator</a></code>
2257 wakaba 1.111 interface defined in this specification is different than the one
2258 wakaba 1.113 defined in the HTML specification.</span></p>
2259 wakaba 1.111
2260    
2261    
2262 wakaba 1.137 <h3 id=apis-defined-in-other-specifications class="has-ja-translation" data-ja-hash="d6d6885373ce92bfa8857f5a375a9c8f"><span class=en-original lang=en><span class=secno>6.3 </span>APIs defined in other specifications</span><span class=ja-translation lang=ja><span class=secno>6.3 </span>他の仕様書で定義されている API</span></h3>
2263 wakaba 1.111
2264 wakaba 1.137 <p class="no-ja-translation" data-ja-hash="1280f8909e789b1739534938ee2d8974"><span class=en-original lang=en>The <code title=dom-opendatabase>openDatabase()</code> and
2265 wakaba 1.111 <code title=dom-opendatabase-sync>openDatabaseSync()</code>
2266 wakaba 1.137 methods are defined in the Web Database specification. <a href=#refsWEBDATABASE>[WEBDATABASE]</a></span></p>
2267 wakaba 1.111
2268    
2269    
2270 wakaba 1.137 <h3 id=interface-objects-and-constructors class="has-ja-translation" data-ja-hash="78e75b89c304218ef77a66cd9efdf398"><span class=en-original lang=en><span class=secno>6.4 </span>Interface objects and constructors</span><span class=ja-translation lang=ja><span class=secno>6.4 </span>界面オブジェクトと構築器</span></h3>
2271 wakaba 1.111
2272     <p class="no-ja-translation" data-ja-hash="891d0a43200fedd7ae183f012070bb93"><span class=en-original lang=en>There must be no interface objects and constructors available in
2273     the global scope of scripts whose <span>script execution
2274     context</span> is a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object except for
2275     the following:</span></p>
2276    
2277     <ul><li><p class="has-ja-translation" data-ja-hash="fefceafe7239d8df54847618da8d3ddd"><span class=en-original lang=en><code>XMLHttpRequest</code> and all interface objects and
2278     constructors defined by the XMLHttpRequest specifications, except
2279     that the <span>document response entity body</span> must always be
2280     null. <a href=#refsXHR>[XHR]</a></span><span class=ja-translation lang=ja>XMLHttpRequest 仕様書で定義されている
2281     <code>XMLHttpRequest</code> とすべての界面オブジェクトと構築器、
2282     ただし<span>文書応答実体本体</span>は常に null でなければ<em class=rfc2119 title="MUST">なりません</em>。 <a
2283     href=#refsXHR>[XHR]</a></span></li>
2284    
2285     <li><p class="no-ja-translation" data-ja-hash="dd3bea5f0bf238db87ad9fb59c7be62a"><span class=en-original lang=en>The <code>WebSocket</code> interface object and
2286     constructor. <a href=#refsWEBSOCKET>[WEBSOCKET]</a></span></li>
2287    
2288     <li><p class="no-ja-translation" data-ja-hash="bbeb4f3911ac8aedf89935a07d70106c"><span class=en-original lang=en>The <code>EventSource</code> interface object and
2289     constructor. <a href=#refsEVENTSOURCE>[EVENTSOURCE]</a></span></li>
2290    
2291     <li><p class="no-ja-translation" data-ja-hash="939ce12ed8f8d8ce1888e6c380db792c"><span class=en-original lang=en>The <code>MessageChannel</code> interface object and
2292     constructor. <a href=#refsHTML5>[HTML5]</a></span></li>
2293    
2294     <li><p class="no-ja-translation" data-ja-hash="0ca0874e3173f58421ed4537975fdd7f"><span class=en-original lang=en>The <code title=dom-Worker><a href=#dom-worker>Worker()</a></code> and <code title=dom-SharedWorker><a href=#dom-sharedworker>SharedWorker(<var title="">url</var>)</a></code> constructors.</span></li>
2295    
2296 wakaba 1.137 </ul><h3 id=worker-locations class="has-ja-translation" data-ja-hash="ae4aa0f882fcbd2ee8252e59113ec205"><span class=en-original lang=en><span class=secno>6.5 </span>Worker locations</span><span class=ja-translation lang=ja><span class=secno>6.5 </span>労働者の所在</span></h3>
2297 wakaba 1.111
2298     <pre class="idl no-ja-translation" data-ja-hash="8d12e26ffacf32cd9d10364c0255ab53"><span class=en-original lang=en>interface <dfn id=workerlocation>WorkerLocation</dfn> {
2299     readonly attribute DOMString <a href=#dom-workerlocation-href title=dom-WorkerLocation-href>href</a>;
2300     readonly attribute DOMString <a href=#dom-workerlocation-protocol title=dom-WorkerLocation-protocol>protocol</a>;
2301     readonly attribute DOMString <a href=#dom-workerlocation-host title=dom-WorkerLocation-host>host</a>;
2302     readonly attribute DOMString <a href=#dom-workerlocation-hostname title=dom-WorkerLocation-hostname>hostname</a>;
2303     readonly attribute DOMString <a href=#dom-workerlocation-port title=dom-WorkerLocation-port>port</a>;
2304     readonly attribute DOMString <a href=#dom-workerlocation-pathname title=dom-WorkerLocation-pathname>pathname</a>;
2305     readonly attribute DOMString <a href=#dom-workerlocation-search title=dom-WorkerLocation-search>search</a>;
2306     readonly attribute DOMString <a href=#dom-workerlocation-hash title=dom-WorkerLocation-hash>hash</a>;
2307     };</span></pre>
2308    
2309     <p class="no-ja-translation" data-ja-hash="0875217b900933e0434228878aa70bb1"><span class=en-original lang=en>A <code><a href=#workerlocation>WorkerLocation</a></code> object represents an <span>absolute
2310     URL</span> set at its creation.</span></p>
2311    
2312     <p class="no-ja-translation" data-ja-hash="12d68ceea5131e0a3f4acc5b2060ee25"><span class=en-original lang=en>The <dfn id=dom-workerlocation-href title=dom-WorkerLocation-href><code>href</code></dfn>
2313     attribute must return the <span>absolute URL</span> that the object
2314     represents.</span></p>
2315    
2316     <p class="no-ja-translation" data-ja-hash="f1f2216168ef764adc270dd0ce7cab68"><span class=en-original lang=en>The <code><a href=#workerlocation>WorkerLocation</a></code> interface also has the complement
2317     of <span>URL decomposition attributes</span>, <dfn id=dom-workerlocation-protocol title=dom-WorkerLocation-protocol><code>protocol</code></dfn>,
2318     <dfn id=dom-workerlocation-host title=dom-WorkerLocation-host><code>host</code></dfn>, <dfn id=dom-workerlocation-port title=dom-WorkerLocation-port><code>port</code></dfn>, <dfn id=dom-workerlocation-hostname title=dom-WorkerLocation-hostname><code>hostname</code></dfn>,
2319     <dfn id=dom-workerlocation-pathname title=dom-WorkerLocation-pathname><code>pathname</code></dfn>,
2320     <dfn id=dom-workerlocation-search title=dom-WorkerLocation-search><code>search</code></dfn>,
2321     and <dfn id=dom-workerlocation-hash title=dom-WorkerLocation-hash><code>hash</code></dfn>. These must
2322     follow the rules given for URL decomposition attributes, with the
2323     <span title=concept-uda-input>input</span> being the
2324     <span>absolute URL</span> that the object represents (same as the
2325     <code title=dom-WorkerLocation-href><a href=#dom-workerlocation-href>href</a></code> attribute), and
2326     the <span title=concept-uda-setter>common setter action</span>
2327     being a no-op, since the attributes are defined to be readonly. <a href=#refsHTML5>[HTML5]</a></span></p>
2328    
2329    
2330     <h2 class="no-num has-ja-translation" data-ja-hash="d95867deadfe690e40f42068d6b59df8" id=references><span class=en-original lang=en>References</span><span class=ja-translation lang=ja>参照</span></h2>
2331    
2332     <p class="big-issue no-ja-translation" data-ja-hash="683a8b064076b13e2c36958afe8b9897"><span class=en-original lang=en>This section will be written in a future
2333     draft.<!--XXX--></span></p>
2334    
2335    
2336     <h2 class="no-num has-ja-translation" data-ja-hash="0407c27180c9b019e644e8ad4c6a9324" id=acknowledgements><span class=en-original lang=en>Acknowledgements</span><span class=ja-translation lang=ja>謝辞</span></h2> <!-- ACKS -->
2337    
2338     <p class="has-ja-translation" data-ja-hash="a17a0feb6f58a31040d51121e80bc233" data-ja-real-hash="f59286e011a68a30c6514aae2845f151"><span class=en-original lang=en>Thanks to
2339    
2340     Aaron Boodman,
2341     &#1040;&#1083;&#1077;&#1082;&#1089;&#1077;&#1081; &#1055;&#1088;&#1086;&#1089;&#1082;&#1091;&#1088;&#1103;&#1082;&#1086;&#1074; (Alexey Proskuryakov),
2342     Anne van Kesteren,
2343     Ben Turner,
2344     Dmitry Titov,
2345     Drew Wilson,
2346     Jeremy Orlow,
2347     Jonas Sicking,
2348     Justin James,
2349     Kevin Hakanson,
2350     Maciej Stachowiak,
2351     Michael Nordman,
2352     Mike Smith,
2353    
2354     and
2355    
2356     Philip Taylor
2357    
2358     for their useful and substantial comments.</span><span class=ja-translation lang=ja>Aaron Boodman, &#1040;&#1083;&#1077;&#1082;&#1089;&#1077;&#1081; &#1055;&#1088;&#1086;&#1089;&#1082;&#1091;&#1088;&#1103;&#1082;&#1086;&#1074; (Alexey Proskuryakov), Anne van Kesteren, Ben Turner, Dmitry Titov, Drew Wilson, Jeremy Orlow, Jonas Sicking, Justin James, Kevin Hakanson, Maciej Stachowiak, Michael Nordman, Mike Smith, Philip Taylor の有用かつ重要なコメントに感謝します。</span></p>
2359    
2360     <p class="has-ja-translation" data-ja-hash="7c6875278ecf56df193c33c553856fac"><span class=en-original lang=en>Huge thanks to the whole Gears team, who pioneered this
2361     technology and whose experience has been a huge influence on this
2362     specification.</span><span class=ja-translation lang=ja>Gears チームの方々にも非常に感謝します。
2363     Gears チームの方々はこの技術を開拓し、その経験はこの仕様書にも多大な影響を与えています。
2364     </span></p>
2365    
2366    

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24