/[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.43 - (hide annotations) (download)
Tue Nov 18 06:21:13 2008 UTC (17 years, 8 months ago) by wakaba
Branch: MAIN
Changes since 1.42: +10 -6 lines
make

1 wakaba 1.1
2     <html lang=en-US-x-hixie>
3     <head>
4     <title>Web Workers</title>
5 wakaba 1.32 <link href=http://www.whatwg.org/style/specification rel=stylesheet>
6     <link href=ja-style rel=stylesheet>
7     <link href=only-ja-style rel="stylesheet" title="Show only Japanese text" id=style-only-ja>
8     <link href=both-en-ja-style rel="alternate stylesheet" title="Show both English and Japanese texts" id=style-both-en-ja>
9 wakaba 1.35 <script src=ja-script defer async></script>
10 wakaba 1.31 <link href="/images/icon" rel=icon>
11 wakaba 1.1
12 wakaba 1.16 <style>
13     p > span:not([title=""]):not([class="big-issue"]), li > span:not([title=""]):not([class="big-issue"]) { border-bottom: solid #99CC99; }
14     </style>
15    
16 wakaba 1.1 <body class=draft>
17     <div class=head>
18 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="b20329e0f615f58f17900e708fa8dbaf"><span class=en-original lang=en><a class=logo href="http://www.whatwg.org/" rel=home><img alt=WHATWG
19     src="/images/logo"></a></span></p>
20 wakaba 1.1
21 wakaba 1.42 <h1 class="no-ja-translation" data-ja-hash="6cb7eb9696d986359fa3a78c4b8e60dc"><span class=en-original lang=en>Web Workers</span></h1>
22 wakaba 1.1
23 wakaba 1.43 <h2 class="no-num no-toc has-ja-translation" data-ja-hash="261cc1ca6c8a57d7e1593e2eedc77604" data-ja-real-hash="b74fa8f8f2ed1aa76a30737af2e097b4" id=draft><span class=en-original lang=en>Draft Recommendation &mdash; 18
24 wakaba 1.42 November 2008</span><span class=ja-translation lang=ja>勧告案<ins class=ja-note>の非公式和訳</ins> &mdash;
25 wakaba 1.43 <ins class=ja-note>(原文出版日)</ins> 2008年11月18日</span></h2>
26 wakaba 1.1
27 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="54759c46800b2712dd15f6097ee6ed63"><span class=en-original lang=en>You can take part in this work. <a
28 wakaba 1.31 href="http://www.whatwg.org/mailing-list">Join the working group's
29 wakaba 1.36 discussion list.</a></span></p>
30 wakaba 1.31
31 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="6a0ea97471522df19cf042a8869d7c52"><span class=en-original lang=en><strong>Web designers!</strong> We have a <a
32 wakaba 1.31 href="http://blog.whatwg.org/faq/">FAQ</a>, a <a
33     href="http://forums.whatwg.org/">forum</a>, and a <a
34     href="http://www.whatwg.org/mailing-list#help">help mailing list</a> for
35 wakaba 1.33 you!</span><span class=ja-translation lang=ja><strong>Web デザイナーのみなさん!</strong> みなさんのための <a
36 wakaba 1.32 href=http://blog.whatwg.org/faq/ lang=en>FAQ</a>、<a
37     href=http://forums.whatwg.org/>掲示板</a>、<a
38     href=http://www.whatwg.org/mailing-list#help>ヘルプ用メイリング・リスト</a>があります!
39    
40     </span><p>
41    
42     <!-- Japanese-translation-only notes -->
43 wakaba 1.33 <ins class="ja-note cover-ja-note" lang=ja>
44 wakaba 1.38 <p>この文書は、 WHATWG 仕様書の日本語訳です。 正式な仕様書は英語版だけであり、この日本語訳はあくまで参考としてご利用ください。
45 wakaba 1.32
46 wakaba 1.38 <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.
47 wakaba 1.32
48 wakaba 1.38 <p>日本語訳は段落をダブルクリックすると編集できます。編集結果はおよそ3時間おきに反映されます。また、原文の変更には毎日自動的に追随しています。 (<a href=notes>詳細</a>)
49 wakaba 1.32
50 wakaba 1.38 <p lang=en>You can edit Japanese text by double-clicking the paragraph you'd like to edit. 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>)
51 wakaba 1.32
52     <p><button type=button onclick="
53     document.getElementById ('style-only-ja').disabled = false;
54     document.getElementById ('style-both-en-ja').disabled = true;
55 wakaba 1.33 ">日本語訳だけ表示 <span lang=en>Show only Japanese translation</span></button>
56 wakaba 1.32 <p><button type=button onclick="
57     document.getElementById ('style-only-ja').disabled = true;
58     document.getElementById ('style-both-en-ja').disabled = false;
59 wakaba 1.33 ">英和対訳表示 <span lang=en>Show both English and Japanese texts</span></button>
60 wakaba 1.38
61     <p class=XXX>原文が更新されて新しい仕様書生成スクリプトを使うようになるまで、
62     この仕様書の訳文の追加・改訂はお控えください。
63 wakaba 1.32 </ins>
64    
65     <p><span><!-- dummy --></span></p>
66 wakaba 1.1
67     <dl>
68 wakaba 1.36 <dt class="has-ja-translation" data-ja-hash="87b044fafc6f01197a9a700e6fa28a69"><span class=en-original lang=en>This version:
69 wakaba 1.32
70 wakaba 1.36 </span><span class=ja-translation lang=ja><ins class=ja-note>原文の</ins>この版</span><dd class="no-ja-translation" data-ja-hash="a713841c83aed89ce71b7ee6b51cb2cb"><span class=en-original lang=en><a
71 wakaba 1.13 href="http://www.whatwg.org/specs/web-workers/current-work/">http://whatwg.org/ww</a>
72 wakaba 1.1
73 wakaba 1.36 </span><dt class="has-ja-translation" data-ja-hash="8866e8de2efa7275a5dc8e942c1613c2"><span class=en-original lang=en>Version history:
74 wakaba 1.32
75 wakaba 1.36 </span><span class=ja-translation lang=ja><ins class=ja-note>原文の</ins>改版履歴:</span><dd class="no-ja-translation" data-ja-hash="609cec19ff8d697eb0a9f7a0104e0bfb"><span class=en-original lang=en>Twitter messages (non-editorial changes only): <a
76 wakaba 1.31 href="http://twitter.com/WHATWG">http://twitter.com/WHATWG</a>
77    
78 wakaba 1.36 </span><dd class="no-ja-translation" data-ja-hash="abaab2a9b4d1bd0f43a2293e5d1fff4d"><span class=en-original lang=en>Commit-Watchers mailing list: <a
79 wakaba 1.31 href="http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org">http://lists.whatwg.org/listinfo.cgi/commit-watchers-whatwg.org</a>
80    
81 wakaba 1.36 </span><dd class="has-ja-translation" data-ja-hash="5e1dbca74cface6f0d0ea523340e6a89" data-ja-real-hash="f82128f124c19a67cc2104420cc99c45"><span class=en-original lang=en>Interactive Web interface: <a
82 wakaba 1.32 href="http://html5.org/tools/web-workers-tracker">http://html5.org/tools/web-workers-tracker</a>
83    
84 wakaba 1.36 </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 class="has-ja-translation" data-ja-hash="ea5cbdd06bfb529e4a1bcfeac9cfbd61" data-ja-real-hash="ae455a827d3d1e5b15fd14df54502cf5"><span class=en-original lang=en>Subversion interface: <a
85 wakaba 1.32 href="http://svn.whatwg.org/webworkers/">http://svn.whatwg.org/webworkers/</a>
86    
87 wakaba 1.36 </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><dt class="has-ja-translation" data-ja-hash="8468b55db22971120cb71091ece7839e"><span class=en-original lang=en>Issues:
88 wakaba 1.32
89 wakaba 1.36 </span><span class=ja-translation lang=ja>問題:</span><dd class="no-ja-translation" data-ja-hash="72b4306377796146b832d635c9b791f4"><span class=en-original lang=en>To send feedback: <a
90 wakaba 1.31 href="http://www.whatwg.org/mailing-list">[email protected]</a>
91    
92 wakaba 1.36 </span><dd class="no-ja-translation" data-ja-hash="7e3aaf1187bd798f9f71dd7e6e4fa9fe"><span class=en-original lang=en>To view and vote on feedback: <a
93 wakaba 1.31 href="http://www.whatwg.org/issues/">http://www.whatwg.org/issues/</a>
94    
95 wakaba 1.36 </span><dt class="has-ja-translation" data-ja-hash="aa8d072dc59504320cfa92381f541a5f"><span class=en-original lang=en>Editor:
96 wakaba 1.32
97 wakaba 1.36 </span><span class=ja-translation lang=ja>編集者:</span><dd class="no-ja-translation" data-ja-hash="220fb2ab7924ad62bc8567b8b9c5f0f8"><span class=en-original lang=en>Ian Hickson, Google, [email protected]
98     </span></dl>
99 wakaba 1.1
100 wakaba 1.36 <p class="copyright no-ja-translation" data-ja-hash="01887da059d5ef35df4e1cc221f80391"><span class=en-original lang=en>&copy; Copyright 2004-2008 Apple Computer, Inc.,
101     Mozilla Foundation, and Opera Software ASA.</span></p>
102 wakaba 1.1
103 wakaba 1.36 <p class="copyright no-ja-translation" data-ja-hash="5419c8afab07265f61a6768f2680776d"><span class=en-original lang=en>You are granted a license to use, reproduce and create
104     derivative works of this document.</span></p>
105 wakaba 1.1 </div>
106    
107     <hr>
108    
109 wakaba 1.36 <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>
110 wakaba 1.1
111 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="a4f61aa99f0d87d5d87b6e07071a74da"><span class=en-original lang=en>This specification defines an API that allows Web application authors to
112 wakaba 1.32 spawn background workers running scripts in parallel to their main page.
113     This allows for thread-like operation with message-passing as the
114     coordination mechanism.
115    
116     </span><span class=ja-translation lang=ja>この仕様書は、 Web アプリケーションで、主たる頁とは並列に、
117 wakaba 1.14 背景労働者スクリプトを走らせるための API を定義します。
118 wakaba 1.36 これにより、メッセージ・パッシングによるスレッド的操作を協調機構として利用できるようになります。</span><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>
119 wakaba 1.1
120 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="3f706d8337b443d9a959c36a9b3677a3"><span class=en-original lang=en><strong>This is a work in progress!</strong> This document is changing
121 wakaba 1.31 on a daily if not hourly basis in response to comments and as a general
122     part of its development process. Comments are very welcome, please send
123     them to <a href="mailto:[email protected]">[email protected]</a>. Thank
124     you.
125    
126 wakaba 1.36 </span><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.
127 wakaba 1.32
128 wakaba 1.36 </span><span class=ja-translation lang=ja>現在の焦点は、第1案の開発です。</span><p class="no-ja-translation" data-ja-hash="75e78507b984cae37464af998b8dc8a2"><span class=en-original lang=en>Implementors should be aware that this specification is not stable.
129 wakaba 1.31 <strong>Implementors who are not taking part in the discussions are likely
130     to find the specification changing out from under them in incompatible
131     ways.</strong> Vendors interested in implementing this specification
132     before it eventually reaches the call for implementations should join the
133     <a href="/mailing-list">WHATWG mailing list</a> and take part in the
134     discussions.
135    
136 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="410839ad8421121b3071c639986eb8df"><span class=en-original lang=en>This specification is also being produced by the <a
137 wakaba 1.31 href="http://www.w3.org/html/wg">W3C HTML WG</a>. The two specifications
138     are identical from the table of contents onwards.
139    
140 wakaba 1.36 </span><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>目次
141 wakaba 1.1 </span></h2>
142     <!--begin-toc-->
143    
144     <ul class=toc>
145 wakaba 1.36 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="68d919e9ca0290e233107d49f2bd0973"><span class=en-original lang=en><a href="#introduction"><span class=secno>1. </span>Introduction</a>
146     </span><ul class=toc>
147 wakaba 1.42 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="f94143aeed3bb9197ca798364046d48d"><span class=en-original lang=en><a href="#scope"><span class=secno>1.1 </span>Scope</a>
148    
149     </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="cc8223ec55502c55628f56c7b446f30d"><span class=en-original lang=en><a href="#tutorial"><span class=secno>1.2 </span>Tutorial</a>
150 wakaba 1.36 </span><ul class=toc>
151 wakaba 1.42 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="0b86907a8660d3b6a1f8c570573c5d91"><span class=en-original lang=en><a href="#a-background"><span class=secno>1.2.1 </span>A
152 wakaba 1.23 background number-crunching worker</a>
153    
154 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="b61c5d843d6ba7a4c8c70016e0204883"><span class=en-original lang=en><a href="#a-worker"><span class=secno>1.2.2 </span>A worker for
155 wakaba 1.23 updating a client-side database</a>
156    
157 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="357d53d20d468842935342e9432d1d78"><span class=en-original lang=en><a href="#worker"><span class=secno>1.2.3 </span>Worker used for
158     background I/O</a>
159 wakaba 1.23
160 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="abbe71ab70eaeb3035910c4b5987d1d5"><span class=en-original lang=en><a href="#shared"><span class=secno>1.2.4 </span>Shared
161 wakaba 1.23 workers</a>
162    
163 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="ad63a3c0da0bfe49cb5391ca4539ddbc"><span class=en-original lang=en><a href="#delegation"><span class=secno>1.2.5
164 wakaba 1.23 </span>Delegation</a>
165    
166 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="76e6c63eebe871d10886f8bac07ffa91"><span class=en-original lang=en><a href="#providing"><span class=secno>1.2.6 </span>Providing
167 wakaba 1.28 libraries</a>
168 wakaba 1.36 </span></ul>
169 wakaba 1.1
170 wakaba 1.42 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="f1dee0568312d45ee4fb42e24fbb33d7"><span class=en-original lang=en><a href="#conformance"><span class=secno>1.3 </span>Conformance
171 wakaba 1.1 requirements</a>
172 wakaba 1.36 </span><ul class=toc>
173 wakaba 1.42 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="9cf46931a24bdd95446cc0dc13d70962"><span class=en-original lang=en><a href="#dependencies"><span class=secno>1.3.1
174 wakaba 1.1 </span>Dependencies</a>
175 wakaba 1.36 </span></ul>
176 wakaba 1.1
177 wakaba 1.42 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="f14a8054db0709988c39b4986c4a8754"><span class=en-original lang=en><a href="#terminology"><span class=secno>1.4 </span>Terminology</a>
178 wakaba 1.36 </span></ul>
179 wakaba 1.9
180 wakaba 1.36 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="22339fde584025951d7cb7d24876d946"><span class=en-original lang=en><a href="#infrastructure"><span class=secno>2.
181 wakaba 1.13 </span>Infrastructure</a>
182 wakaba 1.36 </span><ul class=toc>
183     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="5763bf8b68038d9e7b7d492bd3ae7bab"><span class=en-original lang=en><a href="#the-global"><span class=secno>2.1 </span>The global
184 wakaba 1.29 scope</a>
185 wakaba 1.36 </span><ul class=toc>
186     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="efb0edfb19efd26410cb99ab1525f948"><span class=en-original lang=en><a href="#the-workerglobalscope"><span class=secno>2.1.1
187 wakaba 1.29 </span>The <code>WorkerGlobalScope</code> abstract interface</a>
188    
189 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="5f99bbc9217feadbd07b63a59fb5f291"><span class=en-original lang=en><a href="#dedicated"><span class=secno>2.1.2 </span>Dedicated
190 wakaba 1.29 workers and the <code>DedicatedWorkerGlobalScope</code> interface</a>
191    
192    
193 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="ba3044d55b8091a7410ee51a58225f09"><span class=en-original lang=en><a href="#shared0"><span class=secno>2.1.3 </span>Shared workers
194 wakaba 1.29 and the <code>SharedWorkerGlobalScope</code> inteface</a>
195 wakaba 1.36 </span></ul>
196 wakaba 1.9
197 wakaba 1.36 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="c2a16736e5155efbee09ceec52062868"><span class=en-original lang=en><a href="#base-urls"><span class=secno>2.2 </span>Base URLs and
198 wakaba 1.16 origins of workers</a>
199    
200 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="9381f86c38af340674795616ffa4729c"><span class=en-original lang=en><a href="#the-queue"><span class=secno>2.3 </span>The queue of
201 wakaba 1.9 events</a>
202    
203 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="9c88712c50f8e878f1e2900817520600"><span class=en-original lang=en><a href="#the-workers"><span class=secno>2.4 </span>The worker's
204 wakaba 1.11 ports</a>
205    
206 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="a6149718eb643990db06957bc18edefd"><span class=en-original lang=en><a href="#processing"><span class=secno>2.5 </span>Processing
207 wakaba 1.9 model</a>
208 wakaba 1.13
209 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="fdab759854cb648250afe4a81693b117"><span class=en-original lang=en><a href="#creating"><span class=secno>2.6 </span>Creating
210 wakaba 1.13 workers</a>
211 wakaba 1.36 </span><ul class=toc>
212     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="77dfb5f9a16bd5b77a73bdd3617c760e"><span class=en-original lang=en><a href="#the-abstractworker"><span class=secno>2.6.1 </span>The
213 wakaba 1.29 <code>AbstractWorker</code> abstract interface</a>
214    
215 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="bbddb6f68afde611f94369aa5a0ad020"><span class=en-original lang=en><a href="#dedicated0"><span class=secno>2.6.2 </span>Dedicated
216 wakaba 1.29 workers and the <code>Worker</code> interface</a>
217    
218 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="1f5bc4a5d6e1eb7e6293adfe42e9818c"><span class=en-original lang=en><a href="#shared1"><span class=secno>2.6.3 </span>Shared workers
219 wakaba 1.29 and the <code>SharedWorker</code> interface</a>
220 wakaba 1.36 </span></ul>
221 wakaba 1.9 </ul>
222    
223 wakaba 1.36 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="3d35781df14354dfc2fd4abccbffef0f"><span class=en-original lang=en><a href="#apis-available"><span class=secno>3. </span>APIs available
224 wakaba 1.13 to workers</a>
225 wakaba 1.36 </span><ul class=toc>
226     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="72f3123f6e8b15f48de8a349c9982513"><span class=en-original lang=en><a href="#importing"><span class=secno>3.1 </span>Importing scripts
227 wakaba 1.22 and libraries</a>
228    
229 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="05a994c34b6bbbd32ecf8b83d319c68d"><span class=en-original lang=en><a href="#the-navigator"><span class=secno>3.2 </span>The
230     <code>Navigator</code> object</a>
231    
232     </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="23c1fe849cb20e56a903c0fc2b325b0c"><span class=en-original lang=en><a href="#apis-defined"><span class=secno>3.3 </span>APIs defined in
233 wakaba 1.22 other specifications</a>
234    
235 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="ebb66d4419ae73eae722f90404b3c573"><span class=en-original lang=en><a href="#interface"><span class=secno>3.4 </span>Interface objects
236 wakaba 1.22 and constructors</a>
237 wakaba 1.23
238 wakaba 1.42 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="951dcfbf081177ae0184ead7e82074f7"><span class=en-original lang=en><a href="#worker0"><span class=secno>3.5 </span>Worker locations</a>
239 wakaba 1.23
240 wakaba 1.36 </span></ul>
241 wakaba 1.1
242 wakaba 1.36 <li class=no-num><p class="no-ja-translation ja-translation-inserted" data-ja-hash="e747237bceaf9dabea52363254fc5f16"><span class=en-original lang=en><a href="#references">References</a>
243 wakaba 1.1
244 wakaba 1.36 </span><li class=no-num><p class="no-ja-translation ja-translation-inserted" data-ja-hash="f440038177834afbee04ac5e84ec86fe"><span class=en-original lang=en><a href="#acknowledgements">Acknowledgements</a>
245     </span></ul>
246 wakaba 1.1 <!--end-toc-->
247    
248     <hr>
249    
250 wakaba 1.36 <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>
251 wakaba 1.32
252 wakaba 1.42 <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>
253    
254     <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
255    
256     </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><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 background
257     independently of any user interface scripts.
258    
259     </span><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 scripts
260     that respond to clicks or other user interactions, and allows long tasks
261     to be executed without yielding to keep the page responsive.
262    
263     </span><p class="no-ja-translation" data-ja-hash="52e3c8127ee80a92ae3709986b8f2450"><span class=en-original lang=en>Workers (as these background scripts are called herein) are relatively
264     heavy-weight, and are not intended to be used in large numbers. For
265     example, it would be inappropriate to launch one worker for each pixel of
266     a four megapixel image. The examples below show some appropriate uses of
267     workers.
268    
269     </span><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 start-up
270     performance cost, and a high per-instance memory cost.
271    
272     </span><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>
273 wakaba 1.32
274 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
275 wakaba 1.32
276 wakaba 1.36 </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><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 following
277 wakaba 1.32 subsections show various examples of this use.
278    
279 wakaba 1.42 </span><span class=ja-translation lang=ja>労働者は色々なことに使えます。次の各節では、色々な使い方の例を示します。</span><h4 id=a-background class="has-ja-translation" data-ja-hash="03100d1ee403be709f47c37e6b55c758"><span class=en-original lang=en><span class=secno>1.2.1 </span>A background
280     number-crunching worker</span><span class=ja-translation lang=ja><span class=secno>1.2.1 </span>数値処理背景労働者</span></h4>
281 wakaba 1.32
282 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
283 wakaba 1.1
284 wakaba 1.36 </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><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
285 wakaba 1.32 expensive task without interrupting the user interface.
286 wakaba 1.1
287 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者の一番単純な用法は、計算的に高価な仕事を利用者界面を中断させずに実行するというものです。</span><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 (na&iuml;vely)
288 wakaba 1.32 compute prime numbers, and progressively displays the most recently found
289     prime number.
290 wakaba 1.23
291 wakaba 1.32 </span><span class=ja-translation lang=ja>この例では、主たる文書が労働者を作って素数を (素朴な方法で) 計算させ、
292 wakaba 1.36 新しく見つかった素数を順番に表示してゆきます。</span><p class="has-ja-translation" data-ja-hash="97bcf42c4070cbcef605cfa277d832fb"><span class=en-original lang=en>The main page is as follows:
293 wakaba 1.32
294 wakaba 1.42 </span><span class=ja-translation lang=ja>主たる頁は次の通りです。</span><pre class="no-ja-translation" data-ja-hash="537851d8b0d221cfefc798638131dbcd"><span class=en-original lang=en>&lt;!DOCTYPE HTML>
295 wakaba 1.23 &lt;html>
296     &lt;head>
297     &lt;title>Worker example: One-core computation&lt;/title>
298     &lt;/head>
299     &lt;body>
300     &lt;p>The highest prime number discovered so far is: &lt;output id="result">&lt;/output>&lt;/p>
301     &lt;script>
302 wakaba 1.29 var worker = new Worker('worker.js');
303     worker.onmessage = function (event) {
304 wakaba 1.42 document.getElementById('result').textContent = event.data;
305 wakaba 1.23 };
306     &lt;/script>
307     &lt;/body>
308 wakaba 1.36 &lt;/html></span></pre>
309 wakaba 1.23
310 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="e4adb9b72fb3bd211cbc81bffd5d4622"><span class=en-original lang=en>The <code title=dom-Worker><a href="#worker2">Worker()</a></code>
311 wakaba 1.30 constructor call creates a worker and returns a <code><a
312     href="#worker1">Worker</a></code> object representing that worker, which
313     is used to communicate with the worker. That object's <code
314     title=handler-Worker-onmessage><a href="#onmessage0">onmessage</a></code>
315     event handler attribute allows the code to receive messages from the
316     worker.
317 wakaba 1.23
318 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:
319 wakaba 1.32
320 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者自体は次の通りです。</span><pre class="no-ja-translation" data-ja-hash="35390f08d92125ad461fd6bb5969cb0c"><span class=en-original lang=en>var n = 1;
321 wakaba 1.23 search: while (true) {
322     n += 1;
323     for (var i = 2; i &lt;= Math.sqrt(n); i += 1)
324     if (n % i == 0)
325     continue search;
326     // found a prime!
327 wakaba 1.29 postMessage(n);
328 wakaba 1.36 }</span></pre>
329 wakaba 1.23
330 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="6cbc84e07a533681566aa4fdf838f852"><span class=en-original lang=en>The bulk of this code is simply an unoptimised search for a prime
331 wakaba 1.23 number. To send a message back to the page, the <code
332 wakaba 1.30 title=dom-DedicatedWorkerGlobalScope-postMessage><a
333     href="#postmessage">postMessage()</a></code> method is used to post a
334     message when a prime is found.
335 wakaba 1.23
336 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="fb1b85e403d4ca967bb53b221e757de8"><span class=en-original lang=en><a href="http://www.whatwg.org/demos/workers/primes/page.html">View this
337 wakaba 1.32 example online</a>.
338    
339 wakaba 1.42 </span><span class=ja-translation lang=ja><a href="http://www.whatwg.org/demos/workers/primes/page.html">この例をオンラインで表示する</a>。</span><h4 id=a-worker 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
340     client-side database</span><span class=ja-translation lang=ja><span class=secno>1.2.2 </span>クライアント側データベースの更新のための労働者</span></h4>
341 wakaba 1.23
342 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
343 wakaba 1.32
344 wakaba 1.36 </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><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 task is to
345 wakaba 1.23 listen for notifications from the server, and, when appropriate, either
346     add or remove data from the client-side database.
347    
348 wakaba 1.36 </span><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 page, the
349 wakaba 1.23 main page can start the worker by just doing:
350    
351 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者と主たる頁の間に通信は発生しませんので、
352     主たる頁は単に次のようにするだけで労働者を開始できます。</span><pre class="no-ja-translation" data-ja-hash="1fa3b8ca6e1be5ba6915c7164f359cf2"><span class=en-original lang=en>&lt;script>
353 wakaba 1.30 new Worker('worker.js');
354 wakaba 1.36 &lt;/script></span></pre>
355 wakaba 1.23
356 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:
357 wakaba 1.32
358 wakaba 1.42 </span><span class=ja-translation lang=ja>労働者自体は次の通りです。</span><pre class="no-ja-translation" data-ja-hash="cfd35229b68e597b6a21322a3e3c1aea"><span class=en-original lang=en>var server = new WebSocket('ws://whatwg.org/database');
359 wakaba 1.25 var database = openDatabase('demobase', '1.0', 'Demo Database', 10240);
360 wakaba 1.23 server.onmessage = function (event) {
361     // data is in the format "command key value"
362 wakaba 1.42 var data = event.data.split(' ');
363 wakaba 1.23 switch (data[0]) {
364     case '+':
365     database.transaction(function(tx) {
366     tx.executeSql('INSERT INTO pairs (key, value) VALUES (?, ?)', data[1], data[2]);
367     });
368     case '-':
369     database.transaction(function(tx) {
370     tx.executeSql('DELETE FROM pairs WHERE key=? AND value=?', data[1], data[2]);
371     });
372     }
373 wakaba 1.36 };</span></pre>
374 wakaba 1.23
375 wakaba 1.42 <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> mechanism
376 wakaba 1.23 and opens the local database (which, we presume, has been created
377 wakaba 1.42 earlier). The worker then just listens for messages from the server and
378 wakaba 1.23 acts on them as appropriate, forever (or until the main page is closed).
379    
380 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="d47c2ada69bdfebeb58219610105a1d7"><span class=en-original lang=en><a
381 wakaba 1.23 href="http://www.whatwg.org/demos/workers/database-updater/page.html">View
382     this example online</a>. (This example will not actually function, since
383     the server does not actually exist and the database is not created by this
384     sample code.)
385    
386 wakaba 1.42 </span><h4 id=worker 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>
387 wakaba 1.32
388 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
389 wakaba 1.23
390 wakaba 1.36 </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><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 fetching
391 wakaba 1.23 stock updates for at regular intervals, and one for fetching performing
392     search queries that the user requests.
393    
394 wakaba 1.36 </span><span class=ja-translation lang=ja>この例では、主たる文書は2つの労働者を使います。
395     1つは一定間隔で株価の更新を取得するためのもので、もう1つは利用者の要求した検索の照会を行う取得のためのものです。</span><p class="has-ja-translation" data-ja-hash="97bcf42c4070cbcef605cfa277d832fb"><span class=en-original lang=en>The main page is as follows:
396 wakaba 1.32
397 wakaba 1.42 </span><span class=ja-translation lang=ja>主たる頁は次の通りです。</span><pre class="no-ja-translation" data-ja-hash="ba58233c15e0292446559987f277f4a6"><span class=en-original lang=en>&lt;!DOCTYPE HTML>
398 wakaba 1.23 &lt;html>
399     &lt;head>
400     &lt;title>Worker example: Stock ticker&lt;/title>
401     &lt;script>
402     // TICKER
403     var symbol = 'GOOG'; // default symbol to watch
404 wakaba 1.29 var ticker = new Worker('ticker.js');
405 wakaba 1.23
406     // SEARCHER
407 wakaba 1.29 var searcher = new Worker('searcher.js');
408 wakaba 1.23 function search(query) {
409 wakaba 1.29 searcher.postMessage(query);
410 wakaba 1.23 }
411    
412     // SYMBOL SELECTION UI
413     function select(newSymbol) {
414     symbol = newSymbol;
415 wakaba 1.29 ticker.postMessage(symbol);
416 wakaba 1.23 }
417     &lt;/script>
418     &lt;/head>
419     &lt;body>
420     &lt;p>&lt;output id="symbol">&lt;/output> &lt;output id="value">&lt;/output>&lt;/p>
421     &lt;script>
422 wakaba 1.29 ticker.onmessage = function (event) {
423 wakaba 1.42 var data = event.data.split(' ');
424 wakaba 1.23 document.getElementById('symbol').textContent = data[0];
425     document.getElementById('value').textContent = data[1];
426     };
427 wakaba 1.29 ticker.postMessage(symbol);
428 wakaba 1.23 &lt;/script>
429     &lt;p>&lt;label>Search: &lt;input type="text" oninput="search(this.value)">&lt;/label>&lt;/p>
430     &lt;ul id="results">&lt;/ul>
431     &lt;script>
432 wakaba 1.29 searcher.onmessage = function (event) {
433 wakaba 1.42 var data = event.data.split(' ');
434 wakaba 1.23 var results = document.getElementById('results');
435     while (results.hasChildNodes()) // clear previous results
436     results.removeChild(results.firstChild);
437     for (var i = 0; i &lt; data.length; i += 1) {
438     // add a list item with a button for each result
439     var li = document.createElement('li');
440     var button = document.createElement('button');
441     button.value = data[i];
442     button.type = 'button';
443     button.onclick = function () { select(this.value); };
444     button.textContent = data[i];
445     li.appendChild(button);
446     results.appendChild(li);
447     }
448     };
449     &lt;/script>
450     &lt;p>(The data in this example is not real. Try searching for "Google" or "Apple".)&lt;/p>
451     &lt;/body>
452 wakaba 1.36 &lt;/html></span></pre>
453 wakaba 1.23
454 wakaba 1.36 <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 network
455 wakaba 1.23 calls. This library is as follows:
456    
457 wakaba 1.36 </span><span class=ja-translation lang=ja>両労働者は実際のネットワークの呼び出しを行う共通のライブラリーを使います。
458     このライブラリーは次の通りです。</span><pre class="no-ja-translation" data-ja-hash="764d750a19834bf904d276466724339c"><span class=en-original lang=en>function get(url) {
459 wakaba 1.29 try {
460     var xhr = new XMLHttpRequest();
461     xhr.open('GET', url, false);
462     xhr.send();
463     return xhr.responseText;
464     } catch (e) {
465     return ''; // turn all errors into empty results
466     }
467 wakaba 1.36 }</span></pre>
468 wakaba 1.23
469 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="ee10423864c33d68e8676bf88cb75046"><span class=en-original lang=en>The stock updater worker is as follows:
470 wakaba 1.23
471 wakaba 1.42 </span><span class=ja-translation lang=ja>株価更新者の労働者は次の通りです。</span><pre class="no-ja-translation" data-ja-hash="66ef47eaf421ea8066871b71807859be"><span class=en-original lang=en>importScripts('io.js');
472 wakaba 1.23 var timer;
473     var symbol;
474     function update() {
475 wakaba 1.29 postMessage(symbol + ' ' + get('stock.cgi?' + symbol));
476 wakaba 1.23 timer = setTimeout(update, 10000);
477     }
478 wakaba 1.29 onmessage = function (event) {
479 wakaba 1.23 if (timer)
480     clearTimeout(timer);
481 wakaba 1.42 symbol = event.data;
482 wakaba 1.23 update();
483 wakaba 1.36 };</span></pre>
484 wakaba 1.23
485 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="aa6a78ceb7b91cdf90925cc36c6c6676"><span class=en-original lang=en>The search query worker is as follows:
486 wakaba 1.23
487 wakaba 1.42 </span><span class=ja-translation lang=ja>検索の照会の労働者は次の通りです。</span><pre class="no-ja-translation" data-ja-hash="ac0353e2a69ae5ffdc861cca404ef9f0"><span class=en-original lang=en>importScripts('io.js');
488 wakaba 1.29 onmessage = function (event) {
489 wakaba 1.42 postMessage(get('search.cgi?' + event.data));
490 wakaba 1.36 };</span></pre>
491 wakaba 1.23
492 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="9b529b56f810a73a138b067e5dfe89cd"><span class=en-original lang=en><a href="http://www.whatwg.org/demos/workers/stocks/page.html">View this
493 wakaba 1.32 example online</a>.
494 wakaba 1.23
495 wakaba 1.42 </span><span class=ja-translation lang=ja><a href="http://www.whatwg.org/demos/workers/stocks/page.html">この例をオンラインで表示する</a>。</span><h4 id=shared 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>
496 wakaba 1.32
497 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
498 wakaba 1.32
499 wakaba 1.42 </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><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 are all
500 wakaba 1.23 viewing the same map. All the windows share the same map information, with
501     a single worker coordinating all the viewers. Each viewer can move around
502 wakaba 1.42 independently, but if they set any data on the map, all the viewers are
503 wakaba 1.23 updated.
504    
505 wakaba 1.42 </span><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 the
506 wakaba 1.23 viewers:
507    
508 wakaba 1.36 </span><span class=ja-translation lang=ja>主たる頁は特に何もなく、単に表示器を開くためだけのものです。</span><pre class="no-ja-translation" data-ja-hash="55a104a8ba6c7596b2ca462c2ffb1f0a"><span class=en-original lang=en>&lt;!DOCTYPE HTML>
509 wakaba 1.23 &lt;html>
510     &lt;head>
511     &lt;title>Workers example: Multiviewer&lt;/title>
512     &lt;script>
513     function openViewer() {
514     window.open('viewer.html');
515     }
516     &lt;/script>
517     &lt;/head>
518     &lt;body>
519     &lt;p>&lt;button type=button onclick="openViewer()">Open a new
520     viewer&lt;/button>&lt;/p>
521     &lt;p>Each viewer opens in a new window. You can have as many viewers
522     as you like, they all view the same data.&lt;/p>
523     &lt;/body>
524 wakaba 1.36 &lt;/html></span></pre>
525 wakaba 1.23
526 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="cee02afe1e87e7182f5219ccf54757ca"><span class=en-original lang=en>The viewer is more involved:
527 wakaba 1.23
528 wakaba 1.42 </span><span class=ja-translation lang=ja>表示器はもっと色々しています。</span><pre class="no-ja-translation" data-ja-hash="99dd203a533b07b5af460448666b5a5e"><span class=en-original lang=en>&lt;!DOCTYPE HTML>
529 wakaba 1.23 &lt;html>
530     &lt;head>
531     &lt;title>Workers example: Multiviewer viewer&lt;/title>
532     &lt;script>
533 wakaba 1.29 var worker = new SharedWorker('worker.js', 'core');
534 wakaba 1.23
535     // CONFIGURATION
536     function configure(event) {
537 wakaba 1.42 if (event.data.substr(0, 4) != 'cfg ') return;
538     var name = event.data.substr(4).split(' ', 1);
539 wakaba 1.23 // update display to mention our name is name
540     document.getElementsByTagName('h1')[0].textContent += ' ' + name;
541     // no longer need this listener
542 wakaba 1.25 worker.port.removeEventListener('message', configure, false);
543 wakaba 1.23 }
544 wakaba 1.30 worker.port.addEventListener('message', configure, false);
545 wakaba 1.23
546     // MAP
547     function paintMap(event) {
548 wakaba 1.42 if (event.data.substr(0, 4) != 'map ') return;
549     var data = event.data.substr(4).split(',');
550 wakaba 1.23 // display tiles data[0] .. data[8]
551     var canvas = document.getElementById('map');
552     var context = canvas.getContext('2d');
553     for (var y = 0; y &lt; 3; y += 1) {
554     for (var x = 0; x &lt; 3; x += 1) {
555     var tile = data[y * 3 + x];
556     if (tile == '0')
557     context.fillStyle = 'green';
558     else
559     context.fillStyle = 'maroon';
560     fillRect(x * 50, y * 50, 50, 50);
561     }
562     }
563     }
564 wakaba 1.30 worker.port.addEventListener('message', paintMap, false);
565 wakaba 1.23
566     // PUBLIC CHAT
567     function updatePublicChat(event) {
568 wakaba 1.42 if (event.data.substr(0, 4) != 'txt ') return;
569     var name = event.data.substr(4).split(' ', 1);
570     var message = event.data.substr(4 + length(name) + 1);
571 wakaba 1.23 // display "&lt;name> message" in public chat
572     var dialog = document.getElementById('public');
573     var dt = document.createElement('dt');
574     dt.textContent = name;
575     dialog.appendChild(dt);
576     var dd = document.createElement('dd');
577     dd.textContent = message;
578     dialog.appendChild(dd);
579     }
580 wakaba 1.30 worker.port.addEventListener('message', updatePublicChat, false);
581 wakaba 1.23
582     // PRIVATE CHAT
583     function startPrivateChat(event) {
584 wakaba 1.42 if (event.data.substr(0, 4) != 'msg ') return;
585     var name = event.data.substr(4).split(' ', 1);
586 wakaba 1.23 var port = event.port;
587     // display a private chat UI
588     var ul = document.getElementById('private');
589     var li = document.createElement('li');
590     var h3 = document.createElement('h3');
591     h3.textContent = 'Private chat with ' + name;
592     li.appendChild(h3);
593     var dialog = document.createElement('dialog');
594     var addMessage = function(name, message) {
595     var dt = document.createElement('dt');
596     dt.textContent = name;
597     dialog.appendChild(dt);
598     var dd = document.createElement('dd');
599     dd.textContent = message;
600     dialog.appendChild(dd);
601     };
602     port.onmessage = function (event) {
603 wakaba 1.42 addMessage(name, event.data);
604 wakaba 1.23 };
605     li.appendChild(dialog);
606     var form = document.createElement('form');
607     var p = document.createElement('p');
608     var input = document.createElement('input');
609     input.size = 50;
610     p.appendChild(input);
611     p.appendChild(document.createTextNode(' '));
612     var button = document.createElement('button');
613     button.textContent = 'Post';
614     p.appendChild(button);
615     form.onsubmit = function () {
616     port.postMessage(input.value);
617     addMessage('me', input.value);
618     input.value = '';
619     return false;
620     };
621     form.appendChild(p);
622     li.appendChild(form);
623     }
624 wakaba 1.30 worker.port.addEventListener('message', startPrivateChat, false);
625 wakaba 1.23 &lt;/script>
626     &lt;/head>
627 wakaba 1.29 &lt;body>
628 wakaba 1.23 &lt;h1>Viewer&lt;/h1>
629     &lt;h2>Map&lt;/h2>
630     &lt;p>&lt;canvas id="map" height=150 width=150>&lt;/canvas>&lt;/p>
631     &lt;p>
632 wakaba 1.30 &lt;button type=button onclick="worker.port.postMessage('mov left')">Left&lt;/button>
633     &lt;button type=button onclick="worker.port.postMessage('mov up')">Up&lt;/button>
634     &lt;button type=button onclick="worker.port.postMessage('mov down')">Down&lt;/button>
635     &lt;button type=button onclick="worker.port.postMessage('mov right')">Right&lt;/button>
636     &lt;button type=button onclick="worker.port.postMessage('set 0')">Set 0&lt;/button>
637     &lt;button type=button onclick="worker.port.postMessage('set 1')">Set 1&lt;/button>
638 wakaba 1.23 &lt;/p>
639     &lt;h2>Public Chat&lt;/h2>
640     &lt;dialog id="public">&lt;/dialog>
641 wakaba 1.30 &lt;form onsubmit="worker.port.postMessage('txt ' + message.value); message.value = ''; return false;">
642 wakaba 1.23 &lt;p>
643     &lt;input type="text" name="message" size="50">
644     &lt;button>Post&lt;/button>
645     &lt;/p>
646     &lt;/form>
647     &lt;h2>Private Chat&lt;/h2>
648     &lt;ul id="private">&lt;/ul>
649     &lt;/body>
650 wakaba 1.25 &lt;/html>
651 wakaba 1.36 </span></pre>
652 wakaba 1.23
653 wakaba 1.36 <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 viewer is
654 wakaba 1.23 written.
655    
656 wakaba 1.36 </span><span class=ja-translation lang=ja>表示器の書き方についていくつか注意したい重要な点があります。</span><p class="has-ja-translation" data-ja-hash="8bc9c1f9e0e102128838ea8c31c51306"><span class=en-original lang=en><strong>Multiple listeners</strong>. Instead of a single message
657 wakaba 1.23 processing function, the code here attaches multiple event listeners, each
658     one performing a quick check to see if it is relevant for the message. In
659     this example it doesn't make much difference, but if multiple authors
660     wanted to collaborate using a single port to communicate with a worker, it
661     would allow for independent code instead of changes having to all be made
662     to a single event handling function.
663    
664 wakaba 1.36 </span><span class=ja-translation lang=ja><strong>複数の聴取器</strong>。この符号では、メッセージ処理関数を1つ用意する代わりに、
665     複数の事象聴取器を付与し、それぞれが、それがメッセージに関連するかどうかを見るためにさらりと検査を行っています。
666     この例では大きな違いにはなりませんが、複数の著者が労働者と通信するために1つのポートを使って協調したい場合には、
667     独立した符号にできるので変更がある度に1つの事象取扱関数をいじらざるを得なくて済みます。</span><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 unregister
668 wakaba 1.23 specific listeners when you are done with them, as is done with the <code
669     title="">configure()</code> method in this example.
670    
671 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="4eb1fa2095f65662225da4c52db274f1"><span class=en-original lang=en>Finally, the worker:
672 wakaba 1.23
673 wakaba 1.42 </span><span class=ja-translation lang=ja>最後に、労働者は次のようになります。</span><pre class="no-ja-translation" data-ja-hash="70993f8765f69b748af6943ac4387c72"><span class=en-original lang=en>
674 wakaba 1.23 var nextName = 0;
675     function getNextName() {
676     // this could use more friendly names
677     // but for now just return a number
678     return nextName++;
679     }
680    
681     var map = [
682     [0, 0, 0, 0, 0, 0, 0],
683     [1, 1, 0, 1, 0, 1, 1],
684     [0, 1, 0, 1, 0, 0, 0],
685     [0, 1, 0, 1, 0, 1, 1],
686     [0, 0, 0, 1, 0, 0, 0],
687     [1, 0, 0, 1, 1, 1, 1],
688     [1, 1, 0, 1, 1, 0, 1],
689     ];
690    
691     function wrapX(x) {
692     if (x &lt; 0) return wrapX(x + map[0].length);
693     if (x >= map[0].length) return wrapX(x - map[0].length);
694     return x;
695     }
696    
697     function wrapY(y) {
698     if (y &lt; 0) return wrapY(y + map.length);
699     if (y >= map[0].length) return wrapY(y - map.length);
700     return y;
701     }
702    
703 wakaba 1.29 function sendMapData(callback) {
704 wakaba 1.23 var data = '';
705     for (var y = viewer.y-1; y &lt;= viewer.y+1; y += 1) {
706     for (var x = viewer.x-1; x &lt;= viewer.x+1; x += 1) {
707     if (data != '')
708     data += ',';
709     data += map[y][x];
710     }
711     }
712 wakaba 1.29 callback('map ' + data);
713 wakaba 1.23 }
714    
715     var viewers = {};
716     onconnect = function (event) {
717     event.port._name = getNextName();
718     event.port._data = { port: event.port, x: 0, y: 0, };
719     viewers[event.port._name] = event.port._data;
720     event.port.postMessage('cfg ' + name);
721     event.port.onmessage = getMessage;
722 wakaba 1.29 sendMapData(event.port.postMessage);
723 wakaba 1.23 };
724    
725     function getMessage(event) {
726 wakaba 1.42 switch (event.data.substr(0, 4)) {
727 wakaba 1.23 case 'mov ':
728 wakaba 1.42 var direction = event.data.substr(4);
729 wakaba 1.23 var dx = 0;
730     var dy = 0;
731     switch (direction) {
732     case 'up': dy = -1; break;
733     case 'down': dy = 1; break;
734     case 'left': dx = -1; break;
735     case 'right': dx = 1; break;
736     }
737     event.target._data.x = wrapX(event.target._data.x + dx);
738     event.target._data.y = wrapY(event.target._data.y + dy);
739 wakaba 1.29 sendMapData(event.target.postMessage);
740 wakaba 1.23 break;
741     case 'set ':
742 wakaba 1.42 var value = event.data.substr(4);
743 wakaba 1.23 map[event.target._data.y][event.target._data.x] = value;
744     for (var viewer in viewers)
745 wakaba 1.29 sendMapData(viewers[viewer].port.postMessage);
746 wakaba 1.23 break;
747     case 'txt ':
748     var name = event.target._name;
749 wakaba 1.42 var message = event.data.substr(4);
750 wakaba 1.23 for (var viewer in viewers)
751     viewers[viewer].port.postMessage('txt ' + name + ' ' + message);
752     break;
753     case 'msg ':
754     var party1 = event._data;
755 wakaba 1.42 var party2 = viewers[event.data.substr(4).split(' ', 1)];
756 wakaba 1.23 if (party2) {
757     var channel = new MessageChannel();
758     party1.port.postMessage('msg ' + party2.name, channel.port1);
759     party2.port.postMessage('msg ' + party1.name, channel.port2);
760     }
761     break;
762     }
763 wakaba 1.36 }</span></pre>
764 wakaba 1.23
765 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="b0014972506b918202f48b09f30424bd"><span class=en-original lang=en><strong>Connecting to multiple pages</strong>. The script uses the <code
766 wakaba 1.30 title=handler-SharedWorkerGlobalScope-onconnect><a
767     href="#onconnect">onconnect</a></code> event listener to listen for
768     multiple connections.
769 wakaba 1.23
770 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="5ce666b6338718b46fb0dee22dbea88c"><span class=en-original lang=en><strong>Direct channels</strong>. When the worker receives a "msg"
771 wakaba 1.23 message from one viewer naming another viewer, it sets up a direct
772     connection between the two, so that the two viewers can communicate
773     directly without the worker having to proxy all the messages.
774    
775 wakaba 1.36 </span><span class=ja-translation lang=ja><strong>直接通信路</strong>。労働者がある閲覧器から他の閲覧器を名指した「msg」メッセージを受信した時は、
776     両者間の直接の接続を設定し、労働者がすべてのメッセージを仲介せずとも両閲覧器が直接通信できるようにします。</span><p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="4c5ed82f8da671a56292686cc3a60981"><span class=en-original lang=en><a href="http://www.whatwg.org/demos/workers/multiviewer/page.html">View
777 wakaba 1.32 this example online</a>.
778    
779 wakaba 1.42 </span><span class=ja-translation lang=ja><a href="http://www.whatwg.org/demos/workers/multiviewer/page.html">この例をオンラインで表示する</a>。</span><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>
780 wakaba 1.23
781 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
782 wakaba 1.32
783 wakaba 1.36 </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><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
784 wakaba 1.23 performance is to split computationally expensive tasks amongst multiple
785     workers. In this example, a computationally expensive task that is to be
786     performed for every number from 1 to 10,000,000 is farmed out to ten
787     subworkers.
788    
789 wakaba 1.37 </span><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:
790 wakaba 1.23
791 wakaba 1.42 </span><span class=ja-translation lang=ja>主たる頁は次の通りで、単に結果を報告するだけです。</span><pre class="no-ja-translation" data-ja-hash="537851d8b0d221cfefc798638131dbcd"><span class=en-original lang=en>&lt;!DOCTYPE HTML>
792 wakaba 1.23 &lt;html>
793     &lt;head>
794     &lt;title>Worker example: One-core computation&lt;/title>
795     &lt;/head>
796     &lt;body>
797     &lt;p>The highest prime number discovered so far is: &lt;output id="result">&lt;/output>&lt;/p>
798     &lt;script>
799 wakaba 1.29 var worker = new Worker('worker.js');
800     worker.onmessage = function (event) {
801 wakaba 1.42 document.getElementById('result').textContent = event.data;
802 wakaba 1.23 };
803     &lt;/script>
804     &lt;/body>
805 wakaba 1.36 &lt;/html></span></pre>
806 wakaba 1.23
807 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:
808 wakaba 1.32
809 wakaba 1.42 </span><span class=ja-translation lang=ja>労働者自体は次の通りです。</span><pre class="no-ja-translation" data-ja-hash="c2f14df3c3648ecb143c9e271b6721df"><span class=en-original lang=en>// settings
810 wakaba 1.23 var num_workers = 10;
811     var items_per_worker = 1000000;
812    
813     // start the workers
814     var result = 0;
815     var pending_workers = num_workers;
816     for (var i = 0; i &lt; num_workers; i += 1) {
817 wakaba 1.29 var worker = new Worker('core.js');
818     worker.postMessage(i * items_per_worker);
819     worker.postMessage((i+1) * items_per_worker);
820     worker.onmessage = storeResult;
821 wakaba 1.23 }
822    
823     // handle the results
824     function storeResult(event) {
825 wakaba 1.42 result += 1*event.data;
826 wakaba 1.23 pending_workers -= 1;
827     if (pending_workers &lt;= 0)
828 wakaba 1.29 postMessage(result); // finished!
829 wakaba 1.36 }</span></pre>
830 wakaba 1.23
831 wakaba 1.36 <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 that
832 wakaba 1.23 waits for all the subworkers to respond.
833    
834 wakaba 1.36 </span><span class=ja-translation lang=ja>これは部分労働者を開始するループと、
835     すべての部分労働者が応答するのを待つ取扱器から成っています。</span><p class="has-ja-translation" data-ja-hash="53f3483f6fffa25f7c6963e58d683f43"><span class=en-original lang=en>The subworkers are implemented as follows:
836 wakaba 1.23
837 wakaba 1.42 </span><span class=ja-translation lang=ja>部分労働者は次のように実装します。</span><pre class="no-ja-translation" data-ja-hash="d4933c742c2b430e6181e31341229f1f"><span class=en-original lang=en>var start;
838 wakaba 1.23 onmessage = getStart;
839     function getStart(event) {
840 wakaba 1.42 start = 1*event.data;
841 wakaba 1.23 onmessage = getEnd;
842     }
843    
844     var end;
845     function getEnd(event) {
846 wakaba 1.42 end = 1*event.data;
847 wakaba 1.23 onmessage = null;
848     do();
849     }
850    
851     function do() {
852     var result = 0;
853     for (var i = start; i &lt; end; i += 1) {
854     // perform some complex calculation here
855     result += 1;
856     }
857 wakaba 1.29 postMessage(result);
858     close();
859 wakaba 1.36 }</span></pre>
860 wakaba 1.23
861 wakaba 1.36 <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 for the
862 wakaba 1.23 range of numbers thus specified, and then report the result back to the
863     parent.
864    
865 wakaba 1.36 </span><span class=ja-translation lang=ja>部分労働者は2つの事象で2つの数を受信し、指定された数の範囲の計算を行った後、
866     結果を親に報告します。
867     </span><p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="c560664d07d84902d5e9e6c68ffc2f01"><span class=en-original lang=en><a href="http://www.whatwg.org/demos/workers/multicore/page.html">View
868 wakaba 1.32 this example online</a>.
869    
870 wakaba 1.42 </span><span class=ja-translation lang=ja><a href="http://www.whatwg.org/demos/workers/multicore/page.html">この例をオンラインで表示する</a>。</span><h4 id=providing 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>
871 wakaba 1.28
872 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
873 wakaba 1.32
874 wakaba 1.36 </span><span class=ja-translation lang=ja><em>この節は規定の一部ではありません。</em></span><p class="no-ja-translation" data-ja-hash="12371907fb7e8389f76fabaf7a5f8303"><span class=en-original lang=en>Suppose that a cryptography library is made available that provides
875 wakaba 1.28 three tasks:
876    
877 wakaba 1.36 </span><dl>
878 wakaba 1.37 <dt class="has-ja-translation" data-ja-hash="6ea027035e660e254aba77f4bd9cb6e7"><span class=en-original lang=en>Generate a public/private key pair
879 wakaba 1.28
880 wakaba 1.37 </span><span class=ja-translation lang=ja>公開鍵・秘密鍵の組の生成</span><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 public key
881 wakaba 1.28 and then the private key.
882    
883 wakaba 1.36 </span><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
884 wakaba 1.28 cyphertext
885    
886 wakaba 1.36 </span><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 first
887 wakaba 1.28 giving the public key, and the remainder giving the plaintext, each of
888     which is encrypted and then sent on that same channel as the cyphertext.
889     The user can close the port when it is done encrypting content.
890    
891 wakaba 1.36 </span><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
892 wakaba 1.28 plaintext
893    
894 wakaba 1.36 </span><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 first
895 wakaba 1.28 giving the private key, and the remainder giving the cyphertext, each of
896     which is decrypted and then sent on that same channel as the plaintext.
897     The user can close the port when it is done decrypting content.
898 wakaba 1.36 </span></dl>
899 wakaba 1.28
900 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="0e39ac88e71e60206c341926e3785dcd"><span class=en-original lang=en>The library itself is as follows:
901 wakaba 1.28
902 wakaba 1.42 </span><span class=ja-translation lang=ja>ライブラリー自体は次のようになります。</span><pre class="no-ja-translation" data-ja-hash="ece93540f76bf50f9d9ac650f14a714c"><span class=en-original lang=en>function handleMessage(e) {
903     if (e.data == "genkeys")
904 wakaba 1.28 genkeys(e.port);
905 wakaba 1.42 else if (e.data == "encrypt")
906 wakaba 1.28 encrypt(e.port);
907 wakaba 1.42 else if (e.data == "decrypt")
908 wakaba 1.28 decrypt(e.port);
909     }
910    
911     function genkeys(p) {
912     var keys = _generateKeyPair();
913     p.postMessage(keys[0]);
914     p.postMessage(keys[1]);
915     }
916    
917     function encrypt(p) {
918     var key, state = 0;
919     p.onmessage = function (e) {
920     if (state == 0) {
921 wakaba 1.42 key = e.data;
922 wakaba 1.28 state = 1;
923     } else {
924 wakaba 1.42 p.postMessage(_encrypt(key, e.data));
925 wakaba 1.28 }
926     };
927     }
928    
929     function decrypt(p) {
930     var key, state = 0;
931     p.onmessage = function (e) {
932     if (state == 0) {
933 wakaba 1.42 key = e.data;
934 wakaba 1.28 state = 1;
935     } else {
936 wakaba 1.42 p.postMessage(_decrypt(key, e.data));
937 wakaba 1.28 }
938     };
939     }
940    
941 wakaba 1.29 // support being used as a shared worker as well as a dedicated worker
942     if (this.onmessage) // dedicated worker
943     onmessage = handleMessage;
944     else // shared worker
945     onconnect = function (e) { e.port.onmessage = handleMessage; }
946 wakaba 1.28
947    
948     // the "crypto" functions:
949    
950     function _generateKeyPair() {
951     return [Math.random(), Math.random()];
952     }
953    
954     function _encrypt(k, s) {
955     return 'encrypted-' + k + ' ' + s;
956     }
957    
958     function _decrypt(k, s) {
959     return s.substr(s.indexOf(' ')+1);
960 wakaba 1.36 }</span></pre>
961 wakaba 1.28
962 wakaba 1.36 <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 real
963 wakaba 1.28 cryptography.
964    
965 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="76f1d5866d92bc1036d1198cf4eda428"><span class=en-original lang=en>This library could be used as follows:
966 wakaba 1.28
967 wakaba 1.42 </span><span class=ja-translation lang=ja>このライブラリーは次のように使うことができます。</span><pre class="no-ja-translation" data-ja-hash="02df9ec9921dac18bca9782664a47c5b"><span class=en-original lang=en>&lt;!DOCTYPE HTML>
968 wakaba 1.28 &lt;html>
969     &lt;head>
970     &lt;title>Worker example: Crypto library&lt;/title>
971     &lt;script>
972 wakaba 1.29 var crytoLib = new Worker('libcrypto-v1.js'); // or could use 'libcrypto-v2.js'
973 wakaba 1.28 function getKeys() {
974     var state = 0;
975 wakaba 1.29 cryptoLib.startConversation("genkeys").onmessage = function (e) {
976 wakaba 1.28 if (state == 0)
977 wakaba 1.42 document.getElementById('public').value = e.data;
978 wakaba 1.28 else if (state == 1)
979 wakaba 1.42 document.getElementById('private').value = e.data;
980 wakaba 1.28 state += 1;
981     };
982     }
983     function enc() {
984 wakaba 1.29 var port = cryptoLib.startConversation("encrypt");
985     port.postMessage(document.getElementById('public').value);
986     port.postMessage(document.getElementById('input').value);
987     port.onmessage = function (e) {
988 wakaba 1.42 document.getElementById('input').value = e.data;
989 wakaba 1.29 port.close();
990 wakaba 1.28 };
991     }
992     function dec() {
993 wakaba 1.29 var port = cryptoLib.startConversation("decrypt");
994     port.postMessage(document.getElementById('private').value);
995     port.postMessage(document.getElementById('input').value);
996     port.onmessage = function (e) {
997 wakaba 1.42 document.getElementById('input').value = e.data;
998 wakaba 1.29 port.close();
999 wakaba 1.28 };
1000     }
1001     &lt;/script>
1002     &lt;style>
1003     textarea { display: block; }
1004     &lt;/style>
1005     &lt;/head>
1006     &lt;body onload="getKeys()">
1007     &lt;fieldset>
1008     &lt;legend>Keys&lt;/legend>
1009 wakaba 1.29 &lt;p>&lt;label>Public Key: &lt;textarea id="public">&lt;/textarea>&lt;/label>&lt;/p>
1010     &lt;p>&lt;label>Private Key: &lt;textarea id="private">&lt;/textarea>&lt;/label>&lt;/p>
1011 wakaba 1.28 &lt;/fieldset>
1012 wakaba 1.29 &lt;p>&lt;label>Input: &lt;textarea id="input">&lt;/textarea>&lt;/label>&lt;/p>
1013 wakaba 1.28 &lt;p>&lt;button onclick="enc()">Encrypt&lt;/button> &lt;button onclick="dec()">Decrypt&lt;/button>&lt;/p>
1014     &lt;/body>
1015 wakaba 1.36 &lt;/html></span></pre>
1016 wakaba 1.28
1017 wakaba 1.36 <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 crypto
1018 wakaba 1.28 work onto subworkers. This could be done as follows:
1019    
1020 wakaba 1.42 </span><pre class="no-ja-translation" data-ja-hash="12b84d4be6a7f7bdc55d6f3ea37a96b3"><span class=en-original lang=en>function handleMessage(e) {
1021     if (e.data == "genkeys")
1022 wakaba 1.28 genkeys(e.port);
1023 wakaba 1.42 else if (e.data == "encrypt")
1024 wakaba 1.28 encrypt(e.port);
1025 wakaba 1.42 else if (e.data == "decrypt")
1026 wakaba 1.28 decrypt(e.port);
1027     }
1028    
1029     function genkeys(p) {
1030 wakaba 1.29 var generator = new Worker('libcrypto-v2-generator.js');
1031 wakaba 1.28 generator.postMessage('', p);
1032     }
1033    
1034     function encrypt(p) {
1035     p.onmessage = function (e) {
1036 wakaba 1.42 var key = e.data;
1037 wakaba 1.29 var encryptor = new Worker('libcrypto-v2-encryptor.js');
1038 wakaba 1.28 encryptor.postMessage(key, p);
1039     };
1040     }
1041    
1042     function encrypt(p) {
1043     p.onmessage = function (e) {
1044 wakaba 1.42 var key = e.data;
1045 wakaba 1.29 var decryptor = new Worker('libcrypto-v2-decryptor.js');
1046 wakaba 1.28 decryptor.postMessage(key, p);
1047     };
1048     }
1049    
1050 wakaba 1.29 // support being used as a shared worker as well as a dedicated worker
1051     if (this.onmessage) // dedicated worker
1052     onmessage = handleMessage;
1053     else // shared worker
1054     onconnect = function (e) { e.port.onmessage = handleMessage; }
1055 wakaba 1.36 </span></pre>
1056 wakaba 1.28
1057 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="fc1d14c413a94a9015153067739845e7"><span class=en-original lang=en>The little subworkers would then be as follows.
1058 wakaba 1.28
1059 wakaba 1.36 </span><span class=ja-translation lang=ja>小部分労働者は次の通りです。</span><p class="has-ja-translation" data-ja-hash="66f9c4d246b0081919ced7e46c4a9db2"><span class=en-original lang=en>For generating key pairs:
1060 wakaba 1.28
1061 wakaba 1.36 </span><span class=ja-translation lang=ja>鍵組の生成用:</span><pre class="no-ja-translation" data-ja-hash="69e6e4b66305b1a92aee9fcc2372196d"><span class=en-original lang=en>onmessage = function (e) {
1062 wakaba 1.29 var k = _generateKeyPair();
1063     e.port.postMessage(k[0]);
1064     e.port.postMessage(k[1]);
1065 wakaba 1.28 close();
1066     }
1067 wakaba 1.29
1068     function _generateKeyPair() {
1069     return [Math.random(), Math.random()];
1070 wakaba 1.36 }</span></pre>
1071 wakaba 1.28
1072 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="1f07f24df05f20de47483db4dfde2017"><span class=en-original lang=en>For encrypting:
1073 wakaba 1.28
1074 wakaba 1.42 </span><span class=ja-translation lang=ja>暗号化用:</span><pre class="no-ja-translation" data-ja-hash="efa3d6d66bd704b621cb5c4562d9a3cf"><span class=en-original lang=en>onmessage = function (e) {
1075     var key = e.data;
1076 wakaba 1.28 e.port.onmessage = function (e) {
1077 wakaba 1.42 var s = e.data;
1078 wakaba 1.29 postMessage(_encrypt(key, s));
1079 wakaba 1.28 }
1080 wakaba 1.29 e.port.onclose = function (e) {
1081 wakaba 1.28 close();
1082     }
1083 wakaba 1.29 }
1084    
1085     function _encrypt(k, s) {
1086     return 'encrypted-' + k + ' ' + s;
1087 wakaba 1.36 }</span></pre>
1088 wakaba 1.28
1089 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="abf884f40593747f458e7d7400b1eb21"><span class=en-original lang=en>For decrypting:
1090 wakaba 1.28
1091 wakaba 1.42 </span><span class=ja-translation lang=ja>解読用:</span><pre class="no-ja-translation" data-ja-hash="854f6f4811f0f485f12e062b97d487ce"><span class=en-original lang=en>onmessage = function (e) {
1092     var key = e.data;
1093 wakaba 1.28 e.port.onmessage = function (e) {
1094 wakaba 1.42 var s = e.data;
1095 wakaba 1.29 postMessage(_decrypt(key, s));
1096 wakaba 1.28 }
1097 wakaba 1.29 e.port.onclose = function (e) {
1098 wakaba 1.28 close();
1099     }
1100 wakaba 1.29 }
1101    
1102     function _decrypt(k, s) {
1103     return s.substr(s.indexOf(' ')+1);
1104 wakaba 1.36 }</span></pre>
1105 wakaba 1.28
1106 wakaba 1.36 <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 is
1107 wakaba 1.28 happening &mdash; the API hasn't changed; the library can delegate to
1108     subworkers without changing its API, even though it is accepting data
1109     using message channels.
1110    
1111 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="add583522732edb8aca6202c451ddb27" data-ja-real-hash="268a742b1731b3f55fd4ab398fa56d34"><span class=en-original lang=en><a href="http://www.whatwg.org/demos/workers/crypto/page.html">View this
1112 wakaba 1.32 example online</a>.
1113    
1114 wakaba 1.42 </span><span class=ja-translation lang=ja><a href="http://www.whatwg.org/demos/workers/crypto/page.html">この例をオンラインで表示する</a>。</span><h3 id=conformance class="has-ja-translation" data-ja-hash="05644f41fb2fbf61aaab52464b2edf3b"><span class=en-original lang=en><span class=secno>1.3 </span>Conformance requirements</span><span class=ja-translation lang=ja><span class=secno>1.3 </span>適合性要件</span></h3>
1115 wakaba 1.1
1116 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="8b0f72fe04577949924ab1e2997e0d8b"><span class=en-original lang=en>All diagrams, examples, and notes in this specification are
1117 wakaba 1.32 non-normative, as are all sections explicitly marked non-normative.
1118     Everything else in this specification is normative.
1119    
1120     </span><span class=ja-translation lang=ja>この仕様書のすべての図、例示、注意書き、ならびに規定の一部ではないと明記したすべての節は、
1121 wakaba 1.1 規定の一部ではありません。
1122 wakaba 1.36 この仕様書のそれ以外の部分はすべて規定の一部です。</span><p class="no-ja-translation" data-ja-hash="6b9cae822cc27a0168c340eee0cff438"><span class=en-original lang=en>The key words "MUST", "MUST NOT", "REQUIRED", <!--"SHALL", "SHALL
1123 wakaba 1.31 NOT",-->
1124     "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the
1125     normative parts of this document are to be interpreted as described in
1126     RFC2119. For readability, these words do not appear in all uppercase
1127 wakaba 1.36 letters in this specification. <a href="#refsRFC2119">[RFC2119]</a></span></p>
1128 wakaba 1.1 <!-- XXX but they should be
1129     marked up -->
1130    
1131 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="63dc4357c416e0e0f292a5f662ca71ab"><span class=en-original lang=en>Requirements phrased in the imperative as part of algorithms (such as
1132 wakaba 1.32 "strip any leading space characters" or "return false and abort these
1133     steps") are to be interpreted with the meaning of the key word ("must",
1134     "should", "may", etc) used in introducing the algorithm.
1135    
1136     </span><span class=ja-translation lang=ja>算法の一部として<ins class=ja-note>動作の指示の形で (原文では</ins>命令形で<ins class=ja-note>) </ins>記述された要件
1137 wakaba 1.1 (例えば「先頭の間隔文字をすべて除去します」や「偽を返し、これらの段階を停止します」)
1138 wakaba 1.24 は、算法を紹介するに当たって使われたキーワード (<em class=rfc2119 title="MUST">しなければなりません</em>、
1139 wakaba 1.36 <em class=rfc2119 title="SHOULD">するべきです</em>、<em class=rfc2119 title="MAY">して構いません</em>など) の意味により解釈します。</span><p class="has-ja-translation" data-ja-hash="a5a0db584980ce3f2448983d6188b2d1"><span class=en-original lang=en>Some conformance requirements are phrased as requirements on attributes,
1140 wakaba 1.32 methods or objects. Such requirements are to be interpreted as
1141     requirements on user agents.
1142    
1143     </span><span class=ja-translation lang=ja>いくつかの適合性要件は属性やメソッドやオブジェクトの要件として説明されています。
1144 wakaba 1.36 そのような要件は、利用者エージェントに関する要件として解釈します。</span><p class="has-ja-translation" data-ja-hash="27386c326b98d878b3c408c60b6095b0"><span class=en-original lang=en>Conformance requirements phrased as algorithms or specific steps may be
1145 wakaba 1.32 implemented in any manner, so long as the end result is equivalent. (In
1146     particular, the algorithms defined in this specification are intended to
1147     be easy to follow, and not intended to be performant.)
1148    
1149     </span><span class=ja-translation lang=ja>算法や特定の段階として説明されている適合性要件は、
1150 wakaba 1.1 最終的な結果が等価である限り、任意の方法で実装して<em class=rfc2119 title="MAY">構いません</em>。
1151     (特に、この仕様書で定義されている算法は追うのを簡単にしており、
1152 wakaba 1.36 高性能であることを目指してはいません。)</span><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 agents.
1153 wakaba 1.32
1154 wakaba 1.36 </span><span class=ja-translation lang=ja>この仕様書で定義する唯一の適合性の級は利用者エージェントです。</span><p class="has-ja-translation" data-ja-hash="57959e6c42e8d5141b11e501bf60cc2f"><span class=en-original lang=en>User agents may impose implementation-specific limits on otherwise
1155 wakaba 1.32 unconstrained inputs, e.g. to prevent denial of service attacks, to guard
1156     against running out of memory, or to work around platform-specific
1157     limitations.
1158    
1159     </span><span class=ja-translation lang=ja>利用者エージェントは、サービス拒否攻撃を防ぐため、
1160 wakaba 1.1 記憶容量を使い尽くすことを防ぐため、
1161     あるいは環境特有の制限に対応するためなどの目的で、
1162 wakaba 1.42 別段の制約のない入力に対して実装特有の制限を設けて<em class=rfc2119 title="MAY">構いません</em>。</span><h4 id=dependencies class="has-ja-translation" data-ja-hash="896f4eaa4f12972b56ed9cdd9a90b949"><span class=en-original lang=en><span class=secno>1.3.1 </span>Dependencies</span><span class=ja-translation lang=ja><span class=secno>1.3.1 </span>依存性</span></h4>
1163 wakaba 1.1
1164 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="8dc27a34324d9e41d25c6bbbc2d2551c"><span class=en-original lang=en>This specification relies on several other underlying specifications.
1165 wakaba 1.32
1166     </span><span class=ja-translation lang=ja>この仕様書は、他のいくつかの下位の仕様書に依存しています。</span><dl>
1167 wakaba 1.36 <dt class="no-ja-translation" data-ja-hash="6bff62b10d884fb77428cfe168cd783d"><span class=en-original lang=en>HTML5
1168 wakaba 1.1
1169 wakaba 1.36 </span><dd>
1170     <p class="no-ja-translation" data-ja-hash="692ef0a750fa95ddb11f05608021ff02"><span class=en-original lang=en>Many fundamental concepts from HTML5 are used by this specification.
1171     <a href="#refsHTML5">[HTML5]</a></span></p>
1172 wakaba 1.1
1173 wakaba 1.36 <dt class="no-ja-translation" data-ja-hash="760145493119c1b42cb6fe0bbde08987"><span class=en-original lang=en>ECMAScript
1174 wakaba 1.1
1175 wakaba 1.36 </span><dd>
1176     <p class="no-ja-translation" data-ja-hash="9fbcf32dffdec6694cf4ea145ef5db36"><span class=en-original lang=en>This specification is intended to be used with JavaScript as the
1177     scripting language. <a href="#refsJS">[JS]</a></span></p>
1178 wakaba 1.1
1179 wakaba 1.36 <dt class="no-ja-translation" data-ja-hash="21838f6e93b1a2157b16dcb6281ff225"><span class=en-original lang=en>WebIDL
1180 wakaba 1.1
1181 wakaba 1.36 </span><dd>
1182     <p class="no-ja-translation" data-ja-hash="f0d2498c8bb497932f36ddf86e0cf1e4"><span class=en-original lang=en>The IDL blocks in this specification use the semantics of the WebIDL
1183     specification. <a href="#refsWebIDL">[WebIDL]</a></span></p>
1184 wakaba 1.1 </dl>
1185    
1186 wakaba 1.42 <h3 id=terminology class="has-ja-translation" data-ja-hash="e182a8a3f2adf774fb1c959df71b8600"><span class=en-original lang=en><span class=secno>1.4 </span>Terminology</span><span class=ja-translation lang=ja><span class=secno>1.4 </span>用語</span></h3>
1187 wakaba 1.32
1188 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="a8b72c8eb10ed78401c92b2b0eb7d5ec"><span class=en-original lang=en>For simplicity, terms such as <em>shown</em>, <em>displayed</em>, and
1189 wakaba 1.32 <em>visible</em> might sometimes be used when referring to the way a
1190     document is rendered to the user. These terms are not meant to imply a
1191     visual medium; they must be considered to apply to other media in
1192     equivalent ways.
1193 wakaba 1.1
1194 wakaba 1.32 </span><span class=ja-translation lang=ja>簡単のため、文書が利用者に対してレンダリングされる方法に言及する時に<em>示す</em>、
1195 wakaba 1.24 <em>表示する</em>、<em>可視</em>などの用語を使うことがあります。
1196     このような用語は特に視覚媒体を暗示しているわけではありません。
1197 wakaba 1.36 他の媒体であってもこれらの用語が等価な方法で適用されるものと考えなければ<em class=rfc2119 title="MUST">なりません</em>。</span><p class="has-ja-translation" data-ja-hash="f99630e4a7f12f2c4ecb88e02bf4a644"><span class=en-original lang=en>The construction "a <code title="">Foo</code> object", where <code
1198 wakaba 1.32 title="">Foo</code> is actually an interface, is sometimes used instead of
1199     the more accurate "an object implementing the interface <code
1200     title="">Foo</code>".
1201    
1202     </span><span class=ja-translation lang=ja>「<code title="">Foo</code> オブジェクト」という構文 (<code title="">Foo</code>
1203 wakaba 1.10 は実際には界面) を時々使いますが、より正確な「界面 <code title="">Foo</code>
1204 wakaba 1.36 を実装しているオブジェクト」の代わりに用いています。</span><p class="no-ja-translation" data-ja-hash="eb827c696acddeb1a8d0447095c94e07"><span class=en-original lang=en>The term DOM is used to refer to the API set made available to scripts
1205 wakaba 1.31 in Web applications, and does not necessarily imply the existence of an
1206     actual <code>Document</code> object or of any other <code>Node</code>
1207     objects as defined in the DOM Core specifications. <a
1208     href="#refsDOM3CORE">[DOM3CORE]</a>
1209    
1210 wakaba 1.36 </span><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 being
1211 wakaba 1.32 retrieved (e.g. by author script), and is said to be <em>setting</em> when
1212     a new value is assigned to it.
1213    
1214     </span><span class=ja-translation lang=ja>DOM 属性は、その値が (例えば著者のスクリプトにより) 取り出される時<em>取得される</em>といい、
1215 wakaba 1.36 新しい値がその属性に割り当てられる時<em>設定される</em>といいます。</span><p class="has-ja-translation" data-ja-hash="3bc657beddfe2afa99ec418903cab1b0"><span class=en-original lang=en>If a DOM object is said to be <dfn id="en-live">live</dfn>, then that means
1216 wakaba 1.32 that any attributes returning that object must always return the same
1217     object (not a new object each time), and the attributes and methods on
1218     that object must operate on the actual underlying data, not a snapshot of
1219     the data.
1220    
1221     </span><span class=ja-translation lang=ja>DOM オブジェクトが<dfn id=live>生きている</dfn>という場合、
1222 wakaba 1.1 そのオブジェクトを返す属性は常に同じオブジェクトを返さなければ<em class=rfc2119 title="MUST">ならない</em>
1223     (毎回新しいオブジェクトを返すのではなく) 上に、
1224     そのオブジェクトの属性やメソッドがそのオブジェクトの裏にある実際のデータのスナップ写真ではなく、
1225 wakaba 1.36 データそのものに対して操作されなければ<em class=rfc2119 title="MUST">ならない</em>ことを意味します。</span><h2 id=infrastructure class="has-ja-translation" data-ja-hash="cba4f4cee5c6a3e6d8be8da68fa1234e"><span class=en-original lang=en><span class=secno>2. </span>Infrastructure</span><span class=ja-translation lang=ja><span class=secno>2. </span>基盤</span></h2>
1226 wakaba 1.9
1227 wakaba 1.42 <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 workers.
1228 wakaba 1.29 Dedicated workers, once created, and are linked to their creator; but
1229     message ports can be used to communicate from a dedicated worker to
1230 wakaba 1.42 multiple other browsing contexts or workers. Shared workers, on the other
1231 wakaba 1.29 hand, are named, and once created any script running in the same
1232     <span>origin</span> can obtain a reference to that worker and communicate
1233     with it.
1234    
1235 wakaba 1.36 </span><h3 id=the-global class="has-ja-translation" data-ja-hash="16d7670f16b3aaf6130252e8f11702eb"><span class=en-original lang=en><span class=secno>2.1 </span>The global scope</span><span class=ja-translation lang=ja><span class=secno>2.1 </span>大域作用域</span></h3>
1236 wakaba 1.29
1237 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="216dee088449fef485a489ea8a7432f4"><span class=en-original lang=en>The global scope is the "inside" of a worker.
1238 wakaba 1.29
1239 wakaba 1.36 </span><span class=ja-translation lang=ja>大域作用域は労働者の「内側」です。</span><h4 id=the-workerglobalscope class="has-ja-translation" data-ja-hash="fe5227371e801f4ac588d0d07472a900" data-ja-real-hash="cc17376e4eee7e97d5ab420959bcac76"><span class=en-original lang=en><span class=secno>2.1.1 </span>The <code><a
1240     href="#workerglobalscope">WorkerGlobalScope</a></code> abstract interface</span><span class=ja-translation lang=ja><span class=secno>2.1.1 </span><code><a href="#workerglobalscope">WorkerGlobalScope</a></code> 抽象界面</span></h4>
1241 wakaba 1.9
1242     <pre
1243 wakaba 1.36 class="idl no-ja-translation" data-ja-hash="1f1989e0e082e4bbc1332cd5504df8d6"><span class=en-original lang=en>[NoInterfaceObject] interface <dfn id=workerglobalscope>WorkerGlobalScope</dfn> {
1244 wakaba 1.22 readonly attribute <a href="#workerglobalscope">WorkerGlobalScope</a> <a href="#self" title=dom-WorkerGlobalScope-self>self</a>;
1245 wakaba 1.23 readonly attribute <a href="#workerlocation">WorkerLocation</a> <a href="#location" title=dom-WorkerGlobalScope-location>location</a>;
1246 wakaba 1.29 // also implements everything on <a href="#workerutils">WorkerUtils</a>
1247    
1248 wakaba 1.22 void <a href="#close" title=dom-WorkerGlobalScope-close>close</a>();
1249 wakaba 1.29 attribute <span>EventListener</span> <a href="#onclose" title=handler-WorkerGlobalScope-onclose>onclose</a>;
1250 wakaba 1.36 };</span></pre>
1251 wakaba 1.9
1252 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="1eaadf1fd34d0295b8799d73be1a9135"><span class=en-original lang=en>Objects implementing the <code><a
1253     href="#workerglobalscope">WorkerGlobalScope</a></code> interface must also
1254     implement the <code>EventTarget</code> interface.
1255 wakaba 1.23
1256 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="087af626d2f79d49dcf366c0227c32c0"><span class=en-original lang=en>The <dfn id=self
1257 wakaba 1.22 title=dom-WorkerGlobalScope-self><code>self</code></dfn> attribute must
1258     return the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code>
1259     object itself.
1260    
1261 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="8e9bf18a7820b4401892ba71daf05527"><span class=en-original lang=en>The <dfn id=location
1262 wakaba 1.23 title=dom-WorkerGlobalScope-location><code>location</code></dfn> attribute
1263     must return the <code><a href="#workerlocation">WorkerLocation</a></code>
1264     object created for the <code><a
1265     href="#workerglobalscope">WorkerGlobalScope</a></code> object when the
1266     worker was created. It represents the <span>absolute URL</span> of the
1267     script that was used to initialize the worker.
1268 wakaba 1.22
1269 wakaba 1.36 </span><hr>
1270 wakaba 1.29
1271 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="4613c16766e1a2533e8acb2824c6f9fe"><span class=en-original lang=en>When a script invokes the <dfn id=close
1272 wakaba 1.29 title=dom-WorkerGlobalScope-close><code>close()</code></dfn> method on a
1273     <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object,
1274     the user agent must run the following steps:
1275    
1276 wakaba 1.36 </span><ol>
1277 wakaba 1.29 <li>
1278 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="b0aabb71ba9d59702ebab2ddd8d5e874"><span class=en-original lang=en>Create an <code>Event</code> object with the event name <code
1279 wakaba 1.29 title=event-close>close</code>, which does not bubble and is not
1280     cancelable, and add it to the <code><a
1281     href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1282     href="#queue">queue of events</a>, targetted at the <code><a
1283     href="#workerglobalscope">WorkerGlobalScope</a></code> object itself.
1284    
1285 wakaba 1.36 </span><li>
1286     <p class="no-ja-translation" data-ja-hash="6243c3e4951724a3633743634fccb06e"><span class=en-original lang=en>Set the worker's <code><a
1287 wakaba 1.29 href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1288     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag to
1289     true.
1290    
1291 wakaba 1.36 </span><li>
1292     <p class="no-ja-translation" data-ja-hash="23294ec8206dcdfff40f0f9dab0db01a"><span class=en-original lang=en>For each <code>MessagePort</code> object that is entangled with
1293 wakaba 1.29 another port and that has one (but only one) port whose owner is the
1294     <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object
1295     on which the method was invoked (this would include, for instance, the
1296     implicit port in used for dedicated workers), run the following
1297 wakaba 1.36 substeps:</span></p>
1298 wakaba 1.29
1299     <ol>
1300     <li>
1301 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="788aa9e1f63682ac05822b3d8b0aad62"><span class=en-original lang=en>Unentangle the two ports.
1302 wakaba 1.32
1303     </span><span class=ja-translation lang=ja>2つのポートをほどきます。</span><li>
1304 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="6a67dae4e1af3f08dd5d82d5ee59c9a5"><span class=en-original lang=en>At the next available opportunity, after any scripts have finished
1305 wakaba 1.29 executing<!-- XXX queue -->, <span>fire a simple event</span> called
1306     <code title=event-close>close</code> at the other port (the one whose
1307     owner is not the <code><a
1308     href="#workerglobalscope">WorkerGlobalScope</a></code> object on which
1309     the <code title=dom-WorkerGlobalScope-close><a
1310     href="#close">close()</a></code> method was called).
1311 wakaba 1.36 </span></ol>
1312 wakaba 1.29 </ol>
1313 wakaba 1.9
1314 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="3df99fd92cbc7213b4f00b8953997403"><span class=en-original lang=en>The following are the <span>event handler DOM attributes</span> that
1315 wakaba 1.22 must be supported by objects implementing the <code><a
1316     href="#workerglobalscope">WorkerGlobalScope</a></code> interface:
1317    
1318 wakaba 1.36 </span><dl>
1319     <dt class="no-ja-translation" data-ja-hash="96d62a92c59fca4cd2589c560425090f"><span class=en-original lang=en><dfn id=onclose
1320 wakaba 1.29 title=handler-WorkerGlobalScope-onclose><code>onclose</code></dfn>
1321 wakaba 1.11
1322 wakaba 1.36 </span><dd>
1323     <p class="has-ja-translation" data-ja-hash="91a2ce3a21f7ed687afe756baa5387d8" data-ja-real-hash="1388215c8f7c8c11b36e9c90d06b48e3"><span class=en-original lang=en>Must be invoked whenever a <code title=event-close>close</code> event
1324 wakaba 1.32 is targeted at or bubbles through the <code><a
1325     href="#workerglobalscope">WorkerGlobalScope</a></code> object.
1326     </span><span class=ja-translation lang=ja><code title=event-close>close</code> 事象が当該 <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1327 wakaba 1.29 呼び出されなければなりません。</span></dl>
1328    
1329 wakaba 1.36 <h4 id=dedicated class="no-ja-translation" data-ja-hash="01e2b66319613f26fcb4ea361d2009e4"><span class=en-original lang=en><span class=secno>2.1.2 </span>Dedicated workers and the
1330 wakaba 1.29 <code><a
1331     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1332 wakaba 1.36 interface</span></h4>
1333 wakaba 1.29
1334     <pre
1335 wakaba 1.42 class="idl no-ja-translation" data-ja-hash="2417974e77f12d3b3ace4550af00bd29"><span class=en-original lang=en>[NoInterfaceObject] interface <dfn id=dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</dfn> : <a href="#workerglobalscope">WorkerGlobalScope</a> {
1336 wakaba 1.30 void <a href="#postmessage" title=dom-DedicatedWorkerGlobalScope-postMessage>postMessage</a>(in DOMString message);
1337 wakaba 1.42 void <a href="#postmessage" title=dom-DedicatedWorkerGlobalScope-postMessage>postMessage</a>(in DOMString message, in <span>MessagePort</span> messagePort);<!--
1338     <span>MessagePort</span> <span title="dom-DedicatedWorkerGlobalScope-startConversation">startConversation</span>(in DOMString message);-->
1339 wakaba 1.29 attribute <span>EventListener</span> <a href="#onmessage" title=handler-DedicatedWorkerGlobalScope-onmessage>onmessage</a>;
1340 wakaba 1.36 };</span></pre>
1341 wakaba 1.29
1342 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="c6ea7d83d489d6962a5dafa4cb9883ac"><span class=en-original lang=en><code><a
1343 wakaba 1.29 href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1344     objects act as if they had an implicit <code>MessagePort</code> associated
1345     with them. This port is part of a channel that is set up when the worker
1346     is created, but it is not exposed. This object must never be garbage
1347     collected before the <code><a
1348     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1349     object.
1350    
1351 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="cd46f0a484fa815888d26bffc00cd30a"><span class=en-original lang=en>All messages received by that port must immediately be retargetted at
1352 wakaba 1.29 the <code><a
1353     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1354     object.
1355    
1356 wakaba 1.42 </span><p class="no-ja-translation" data-ja-hash="c343842e8ec7635e987fef78935dd0ae"><span class=en-original lang=en>The <dfn id=postmessage
1357     title=dom-DedicatedWorkerGlobalScope-postMessage><code>postMessage()</code></dfn><!--
1358     and <dfn
1359     title="dom-DedicatedWorkerGlobalScope-startConversation"><code>startConversation()</code></dfn>-->
1360     method<!--s (startConversation)--> on <code><a
1361 wakaba 1.29 href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1362 wakaba 1.42 objects must act as if, when invoked, it<!--/they (startConversation)-->
1363     immediately invoked the method of the same name on the port, with the same
1364     arguments, and returned the same return value.
1365 wakaba 1.29
1366 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="a1ce69c9e43bed80103920cd0e52253e"><span class=en-original lang=en>The following are the <span>event handler DOM attributes</span> that
1367 wakaba 1.29 must be supported by objects implementing the <code><a
1368     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1369     interface:
1370    
1371 wakaba 1.36 </span><dl>
1372     <dt class="no-ja-translation" data-ja-hash="160334ee188f54bd11cad6927542df5d"><span class=en-original lang=en><dfn id=onmessage
1373 wakaba 1.29 title=handler-DedicatedWorkerGlobalScope-onmessage><code>onmessage</code></dfn>
1374 wakaba 1.11
1375 wakaba 1.36 </span><dd>
1376     <p class="has-ja-translation" data-ja-hash="91a2ce3a21f7ed687afe756baa5387d8" data-ja-real-hash="693bf14ecd01b81e9953c2197c4ce97b"><span class=en-original lang=en>Must be invoked whenever a <code
1377 wakaba 1.32 title=event-DedicatedWorkerGlobalScope-message>message</code> event is
1378     targeted at or bubbles through the <code><a
1379     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1380     object.
1381     </span><span class=ja-translation lang=ja><code title=event-DedicatedWorkerGlobalScope-message>message</code> 事象が当該 <code><a href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1382 wakaba 1.12 呼び出されなければなりません。</span></dl>
1383 wakaba 1.11
1384 wakaba 1.36 <h4 id=shared0 class="no-ja-translation" data-ja-hash="da49a2eed6f0ff2e53a41e7fe6e36a3a"><span class=en-original lang=en><span class=secno>2.1.3 </span>Shared workers and the
1385 wakaba 1.29 <code><a
1386     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
1387 wakaba 1.36 inteface</span></h4>
1388 wakaba 1.29
1389     <pre
1390 wakaba 1.36 class="idl no-ja-translation" data-ja-hash="186ecc4f854426c568d67e4a78529172"><span class=en-original lang=en>[NoInterfaceObject] interface <dfn id=sharedworkerglobalscope>SharedWorkerGlobalScope</dfn> : <a href="#workerglobalscope">WorkerGlobalScope</a> {
1391 wakaba 1.29 readonly attribute DOMString <a href="#name" title=dom-SharedWorkerGlobalScope-name>name</a>;
1392     attribute <span>EventListener</span> <a href="#onconnect" title=handler-SharedWorkerGlobalScope-onconnect>onconnect</a>;
1393 wakaba 1.36 };</span></pre>
1394 wakaba 1.29
1395 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="9d344498c69a5ed60029b76fb274beb2"><span class=en-original lang=en>Shared workers receive message ports through <code
1396 wakaba 1.29 title=event-WorkerGlobalScope-connect>connect</code> events on their
1397     global object for each connection.
1398    
1399 wakaba 1.36 </span><span class=ja-translation lang=ja>共有労働者は、各接続について大域オブジェクトの <code
1400     title=event-WorkerGlobalScope-connect>connect</code> 事象を通じてメッセージ・ポートを受信します。</span><p class="no-ja-translation" data-ja-hash="2cefcb206282ea1a0a38229d76567b14"><span class=en-original lang=en>The <dfn id=name
1401 wakaba 1.29 title=dom-SharedWorkerGlobalScope-name><code>name</code></dfn> attribute
1402     must return the value it was assigned when the <code><a
1403     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> object
1404     was created by the "<a href="#run-a">run a worker</a>" algorithm. Its
1405     value represents the name that can be used to obtain a reference to the
1406     worker using the <code><a href="#sharedworker">SharedWorker</a></code>
1407     constructor.
1408    
1409 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="586e890e429389a63f2656c2d194935f"><span class=en-original lang=en>The following are the <span>event handler DOM attributes</span> that
1410 wakaba 1.29 must be supported by objects implementing the <code><a
1411     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
1412     interface:
1413    
1414 wakaba 1.36 </span><dl>
1415     <dt class="no-ja-translation" data-ja-hash="bb403ab8991a4f893a1ad1d0ffad30b0"><span class=en-original lang=en><dfn id=onconnect
1416 wakaba 1.29 title=handler-SharedWorkerGlobalScope-onconnect><code>onconnect</code></dfn>
1417    
1418 wakaba 1.36 </span><dd>
1419     <p class="has-ja-translation" data-ja-hash="91a2ce3a21f7ed687afe756baa5387d8" data-ja-real-hash="848b5a001778cd88e138b16d00959122"><span class=en-original lang=en>Must be invoked whenever a <code
1420 wakaba 1.32 title=event-SharedWorkerGlobalScope-connect>connect</code> event is
1421     targeted at or bubbles through the <code><a
1422     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
1423     object.
1424     </span><span class=ja-translation lang=ja><code title=event-SharedWorkerGlobalScope-connect>connect</code> 事象が当該 <code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1425 wakaba 1.29 呼び出されなければなりません。</span></dl>
1426 wakaba 1.23
1427 wakaba 1.36 <h3 id=base-urls class="has-ja-translation" data-ja-hash="87cf5066db3fe786def6b713cf422c90"><span class=en-original lang=en><span class=secno>2.2 </span>Base URLs and origins of
1428 wakaba 1.32 workers</span><span class=ja-translation lang=ja><span class=secno>2.2 </span>労働者の基底 URL と起源</span></h3>
1429 wakaba 1.16
1430 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="bf28ef3029c1da544fc7a8e139c0bc54"><span class=en-original lang=en>The <span>base URL</span> of a <span>URL</span> passed to an API in a
1431 wakaba 1.23 worker is the <span>absolute URL</span> given that the worker's <code
1432     title=dom-WorkerGlobalScope-location><a
1433     href="#location">location</a></code> attribute represents.
1434 wakaba 1.22
1435 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="e474e44f65024b5ce02379030cdc0d69"><span class=en-original lang=en>Both the <span>origin</span> and <span>effective script origin</span> of
1436 wakaba 1.22 scripts running in workers are the <span>origin</span> of the
1437 wakaba 1.23 <span>absolute URL</span> given that the worker's <code
1438     title=dom-WorkerGlobalScope-location><a
1439     href="#location">location</a></code> attribute represents.
1440 wakaba 1.22
1441 wakaba 1.36 </span><h3 id=the-queue class="has-ja-translation" data-ja-hash="e751d78f82cd9be78d5bd5c2d9103080"><span class=en-original lang=en><span class=secno>2.3 </span>The queue of events</span><span class=ja-translation lang=ja><span class=secno>2.3 </span>事象の待ち行列</span></h3>
1442 wakaba 1.22
1443 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="12214089c473ab5dd6a5968e61a2c2d0"><span class=en-original lang=en>Each <code><a href="#workerglobalscope">WorkerGlobalScope</a></code>
1444 wakaba 1.22 object is asssociated with a <dfn id=queue>queue of events</dfn>, which is
1445     initially empty.
1446 wakaba 1.9
1447 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="a97955fbeead17cee9d1dce89f3c8c47"><span class=en-original lang=en>An event in the queue can be a DOM event or a timeout callback.
1448 wakaba 1.32
1449 wakaba 1.36 </span><span class=ja-translation lang=ja>待ち行列中の事象は、 DOM 事象か小休止呼び戻しのいずれかです。</span><p class="no-ja-translation" data-ja-hash="39828d766dc86fb82a3becb9bb4a60a9"><span class=en-original lang=en>All asynchronous callbacks and events that would be called or dispatched
1450 wakaba 1.31 in the worker must be added to the worker's queue, with the "<a
1451     href="#run-a">run a worker</a>" processing model below taking care of
1452     actually calling the callbacks or dispatching the events.
1453    
1454 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="3c5a8b0b9b710969e93d11ed5ae2ce7e"><span class=en-original lang=en>Each <code><a href="#workerglobalscope">WorkerGlobalScope</a></code>
1455 wakaba 1.29 object also has a <dfn id=closing
1456     title=dom-WorkerGlobalScope-closing>closing</dfn> flag, which must
1457     initially be false, but which can get set to true by the algorithms in the
1458     processing model section below.
1459    
1460 wakaba 1.42 </span><p class="no-ja-translation" data-ja-hash="c13b201f011d2014c290d70aceb4a536"><span class=en-original lang=en>Once the <code><a
1461 wakaba 1.29 href="#workerglobalscope">WorkerGlobalScope</a></code>'s <a
1462     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag is
1463     set to true, the queue must discard anything else that would be added to
1464 wakaba 1.42 it (existing already on the queue is unaffected unless otherwise
1465     specified). Effectively, once the <a href="#closing"
1466 wakaba 1.29 title=dom-WorkerGlobalScope-closing>closing</a> flag is true, timers stop
1467     firing, notifications for all pending asynchronous operations are dropped,
1468     etc.
1469 wakaba 1.22
1470 wakaba 1.36 </span><h3 id=the-workers class="has-ja-translation" data-ja-hash="b0a758845322b24463d7ebe35160f526"><span class=en-original lang=en><span class=secno>2.4 </span>The worker's ports</span><span class=ja-translation lang=ja><span class=secno>2.4 </span>労働者のポート</span></h3>
1471 wakaba 1.11
1472 wakaba 1.36 <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
1473 wakaba 1.32 context">browsing contexts</span> through <span title="channel
1474     messaging">message channels</span> and their <code>MessagePort</code>
1475     objects.
1476    
1477     </span><span class=ja-translation lang=ja>労働者は、メッセージ通信路とその <code>MessagePort</code>
1478 wakaba 1.43 オブジェクトを通じて、他の労働者や閲覧文脈と通信します。</span><p class="no-ja-translation" data-ja-hash="d37df32a58421c3f64ee7e240c84d9ae"><span class=en-original lang=en>Each <code><a href="#workerglobalscope">WorkerGlobalScope</a></code>
1479 wakaba 1.29 <var title="">worker global scope</var> has a list of <dfn
1480     id=the-workers0>the worker's ports</dfn>, which consists of all the
1481     <code>MessagePort</code> objects that are entangled with another port and
1482     that have one (but only one) port owned by <var title="">worker global
1483 wakaba 1.43 scope</var>. This list includes
1484     <!--all the <code>MessagePort</code> objects that are in events
1485     pending in the <span>queue of events</span>, as well as (commented
1486     out because in practice it makes no difference either way as far as
1487     I can tell, and it would be hard to strictly implement since these
1488     ports might not yet be across the thread boundary)-->
1489     the implicit <code>MessagePort</code> in the case of <a
1490 wakaba 1.29 href="#dedicatedworkerglobalscope"
1491     title=DedicatedWorkerGlobalScope>dedicated workers</a>.
1492 wakaba 1.16
1493 wakaba 1.36 </span><hr>
1494 wakaba 1.16
1495 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="26f978b46778a94d4ba398e774af8b16"><span class=en-original lang=en>A worker is said to be a <dfn id=permissible>permissible worker</dfn> if
1496 wakaba 1.23 either:
1497    
1498 wakaba 1.36 </span><ul>
1499     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="1408e830059dcfb69df672a38b4b1286"><span class=en-original lang=en>at some point past or present a <code>MessagePort</code> owned by the
1500 wakaba 1.23 worker was entangled with a <code>MessagePort</code> <var
1501     title="">p</var> whose owner is a <code>Window</code> object whose
1502     <span>active document</span> is the <code>Document</code> that was that
1503     <span>browsing context</span>'s <span>active document</span> when <var
1504     title="">p</var> was created, and that <code>Document</code> is
1505     <span>fully active</span>, or
1506    
1507 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="d7437726a136144eb08d9f005783cfee"><span class=en-original lang=en>at some point past or present a <code>MessagePort</code> owned by the
1508 wakaba 1.23 worker was entangled with a <code>MessagePort</code> owned by another
1509     worker that is currently a <a href="#permissible">permissible worker</a>.
1510 wakaba 1.36 </span></ul>
1511 wakaba 1.23
1512     <hr>
1513    
1514 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="236c5cb878bfd9b9303cc296c82764ac"><span class=en-original lang=en>A worker is said to be a <dfn id="en-protected">protected worker</dfn> if
1515 wakaba 1.23 either:
1516    
1517 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者は、次のいずれかの場合、<dfn id=protected>保護労働者</dfn>であるといいます。</span><ul>
1518 wakaba 1.42 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="5b3798d7af8069986d09b7dc915cbf47"><span class=en-original lang=en>it has outstanding timers, database transactions, or network
1519     connections, and is a <a href="#permissible">permissible worker</a>, or
1520 wakaba 1.23
1521 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="d7509b8da81775bedb5ee6522497f03d"><span class=en-original lang=en>there is a <a href="#protected">protected worker</a> that at some
1522 wakaba 1.23 point past or present owned a <code>MessagePort</code> that was entangled
1523     with a <code>MessagePort</code> owned by this worker.
1524 wakaba 1.36 </span></ul>
1525 wakaba 1.23
1526     <hr>
1527    
1528 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="dfc82489e5358f7b62384576218af90c"><span class=en-original lang=en>A worker is said to be an <dfn id=active>active needed worker</dfn> if
1529 wakaba 1.23 either:
1530    
1531 wakaba 1.36 </span><ul>
1532     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="96d00b9fb7eefe6bb33e07260d2353f9"><span class=en-original lang=en>the worker is a <a href="#protected">protected worker</a>, or
1533 wakaba 1.23
1534 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="2699a98205d3a6b47ed37910f9896717"><span class=en-original lang=en>at least one of the <a href="#the-workers0">the worker's ports</a> is
1535 wakaba 1.23 entangled with a <code>MessagePort</code> <var title="">p</var> whose
1536     owner is a <code>Window</code> object whose <span>active document</span>
1537     is the <code>Document</code> that was that <span>browsing
1538     context</span>'s <span>active document</span> when that
1539     <code>MessagePort</code> <var title="">p</var> was created, and that
1540     <code>Document</code> is <span>fully active</span>, or
1541 wakaba 1.22
1542 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="67f1204baba1d8bcbbfab28233d2b0d9"><span class=en-original lang=en>at least one of the <a href="#the-workers0">the worker's ports</a> has
1543 wakaba 1.22 an entangled <code>MessagePort</code> owned by a <code><a
1544     href="#workerglobalscope">WorkerGlobalScope</a></code> object that is
1545 wakaba 1.23 itself an <a href="#active">active needed worker</a>.
1546 wakaba 1.36 </span></ul>
1547 wakaba 1.22
1548     <hr>
1549    
1550 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="7642aaede09c23a089220c1421edcbec"><span class=en-original lang=en>A worker is said to be a <dfn id=suspendable>suspendable worker</dfn> if
1551 wakaba 1.23 it is not an <a href="#active">active needed worker</a> but either:
1552 wakaba 1.22
1553 wakaba 1.36 </span><ul>
1554     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="960ae661864050c379756482359cf786"><span class=en-original lang=en>at least one of the <a href="#the-workers0">the worker's ports</a> has
1555 wakaba 1.23 an entangled <code>MessagePort</code> owned by a <code>Window</code>
1556     object, or
1557    
1558 wakaba 1.36 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="c6381c6ecda2bf8a5113dcf88b55f65f"><span class=en-original lang=en>at least one of the <a href="#the-workers0">the worker's ports</a> has
1559 wakaba 1.22 an entangled <code>MessagePort</code> owned by a <code><a
1560     href="#workerglobalscope">WorkerGlobalScope</a></code> object that is
1561 wakaba 1.23 itself a <span>needed worker</span>.
1562 wakaba 1.36 </span></ul>
1563 wakaba 1.16
1564 wakaba 1.36 <h3 id=processing class="has-ja-translation" data-ja-hash="4eeffb677544f6c8799408c6b9021b4c"><span class=en-original lang=en><span class=secno>2.5 </span>Processing model</span><span class=ja-translation lang=ja><span class=secno>2.5 </span>処理モデル</span></h3>
1565 wakaba 1.12
1566 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="afec947263d09d9f2e0ae3ae9d2a5a48"><span class=en-original lang=en>When a user agent is to <dfn id="en-run-a">run a worker</dfn> for a script
1567 wakaba 1.29 with <span>URL</span> <var title="">url</var>, a browsing context <var
1568     title="">owner browsing context</var>, a <code>Document</code> <var
1569     title="">owner document</var>, and with global scope <var title="">worker
1570 wakaba 1.30 global scope</var>, it must run the following steps:
1571 wakaba 1.29
1572 wakaba 1.36 </span><span class=ja-translation lang=ja>利用者エージェントが <span>URL</span> <var title="">url</var>、閲覧文脈 <var
1573     title="">owner browsing context</var>、 <code>Document</code> <var
1574     title="">owner document</var>、大域作用域 <var title="">worker
1575     global scope</var> をもってスクリプトのために<dfn id=run-a>労働者を走らせる</dfn>という時には、次の段階を走らせなければ<em class=rfc2119 title="MUST">なりません</em>。</span><ol>
1576 wakaba 1.12 <li>
1577 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="6fdced8613c508a9db62b2a4bec3fba3"><span class=en-original lang=en>Create a completely separate and parallel execution environment (i.e.
1578 wakaba 1.30 a separate thread or process or equivalent construct), and run the rest
1579 wakaba 1.36 of these steps asychronously in that context.</span><span class=ja-translation lang=ja>完全に分離された並列の実行環境 (すなわち、別のスレッドやプロセスや等価な構造体) を作り、
1580     その文脈で非同期にこれらの段階の残りを走らせます。</span></p>
1581 wakaba 1.30
1582     <li>
1583 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="224b109aab7dec5a65f7db20a27a6ebe"><span class=en-original lang=en>Attempt to <span>fetch</span><!-- XXX --> the resource identified by
1584 wakaba 1.32 <var title="">url</var>.</span><span class=ja-translation lang=ja><var title="">url</var> で識別される資源を取って来ようと試みます。</span></p>
1585 wakaba 1.12
1586 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="35afd3bf1c15de2f7bd9a914bdce905c"><span class=en-original lang=en>If the attempt fails, then, at the next available opportunity, after
1587 wakaba 1.29 any scripts have finished executing<!-- XXX queue -->, <span>fire a
1588     simple event</span> called <code title=event-error>error</code> at all
1589     <code><a href="#worker1">Worker</a></code> or <code><a
1590     href="#sharedworker">SharedWorker</a></code> objects associated with
1591 wakaba 1.36 <var title="">worker global scope</var>. Abort these steps.</span></p>
1592 wakaba 1.12
1593 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="9f4294dc22071991ed41be40c61ad885"><span class=en-original lang=en>If the attempt succeeds, then let <var title="">script</var> be the
1594 wakaba 1.32 resource that was obtained.</span><span class=ja-translation lang=ja>この試みが成功した場合、 <var title="">script</var>
1595 wakaba 1.12 を得られた資源とします。</span></p>
1596    
1597 wakaba 1.36 <p class="note has-ja-translation" data-ja-hash="5ba762159d9de3f8bd326fe0bcfac206"><span class=en-original lang=en>As with <code>script</code> elements, the MIME type of the
1598 wakaba 1.32 script is ignored. Unlike with <code>script</code> elements, there is no
1599     way to override the type. It's always assumed to be JavaScript.</span><span class=ja-translation lang=ja><code>script</code> 要素と同様に、スクリプトの MIME 型は無視します。
1600 wakaba 1.12 <code>script</code> 要素とは異なり、
1601     型を上書きする方法はありません。スクリプトは常に JavaScript
1602     と仮定します。</span></p>
1603 wakaba 1.11 <!-- XXX people will complain about
1604     this. I guess we might want to examine the MIME type... -->
1605    
1606    
1607     <li>
1608 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="85f303cd5cc426e5c9e4264accc8331c"><span class=en-original lang=en>Create a new <code><a href="#workerlocation">WorkerLocation</a></code>
1609 wakaba 1.23 object for the <code title=dom-WorkerGlobalScope-location><a
1610 wakaba 1.29 href="#location">location</a></code> attribute of <var title="">worker
1611 wakaba 1.36 global scope</var>, representing <var title="">url</var>.</span></p>
1612 wakaba 1.23
1613     <li>
1614 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="57f2fa250f68b2d7999150599c6d6662"><span class=en-original lang=en>Let <var title="">script</var>'s <span>script execution context</span>
1615 wakaba 1.29 (and thus also <span>global object</span>) be <var title="">worker
1616 wakaba 1.36 global scope</var>.</span></p>
1617 wakaba 1.9
1618     <li>
1619 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="6746ae7821139d79deeb7bea1d752b6e"><span class=en-original lang=en>Let <var title="">script</var>'s <span>script browsing context</span>
1620     be <var title="">owner browsing context</var>.</span><span class=ja-translation lang=ja><var title="">script</var> のスクリプト閲覧文脈を、
1621     <var title="">owner browsing context</var>
1622 wakaba 1.12 とします。</span></p>
1623 wakaba 1.9
1624     <li>
1625 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="39336ed04b59d4c3873caf9f760b064e"><span class=en-original lang=en>Let <var title="">script</var>'s <span>script document context</span>
1626     be <var title="">owner document</var>.</span><span class=ja-translation lang=ja><var title="">script</var> のスクリプト文書文脈を、
1627     <var title="">owner document</var>
1628 wakaba 1.12 とします。</span></p>
1629 wakaba 1.9
1630     <li>
1631 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="e398ac96f2c6a566febdc580065b9d53"><span class=en-original lang=en><strong>Closing orphan workers</strong>: Start monitoring the worker
1632 wakaba 1.29 such that as soon as it stops being either an <a href="#active">active
1633     needed worker</a> or a <a href="#suspendable">suspendable worker</a>,
1634     the <var title="">worker global scope</var>'s <a href="#closing"
1635     title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true and
1636     an event named <code title=event-close>close</code>, which uses the
1637 wakaba 1.25 <code>Event</code> object, which does not bubble, and which is not
1638 wakaba 1.29 cancelable, is added it to <var title="">worker global scope</var>'s
1639     <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object's
1640     <a href="#queue">queue of events</a>, targetted at the <var
1641 wakaba 1.36 title="">worker global scope</var> itself.</span></p>
1642 wakaba 1.29
1643     <li>
1644 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="1b813b96af4f3c66b891e7626ca59b7e"><span class=en-original lang=en><strong>Suspending workers</strong>: Start monitoring the worker, such
1645 wakaba 1.29 that whenever the <var title="">worker global scope</var>'s <a
1646     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag is
1647     false and the worker is a <a href="#suspendable">suspendable worker</a>,
1648     the user agent suspends execution of script in that worker until such
1649     time as either the <a href="#closing"
1650     title=dom-WorkerGlobalScope-closing>closing</a> flag switches to true or
1651 wakaba 1.36 the worker stops being a <a href="#suspendable">suspendable worker</a>.</span></p>
1652 wakaba 1.29
1653     <li>
1654 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="9d0567ebd1e84fc79b01e38719d99393"><span class=en-original lang=en>Run <var title="">script</var> until it either returns, fails to catch
1655 wakaba 1.29 an exception, or gets prematurely aborted by the "<a href="#kill-a">kill
1656 wakaba 1.30 a worker</a>" or "<a href="#terminate">terminate a worker</a>"
1657 wakaba 1.36 algorithms defined below.</span></p>
1658 wakaba 1.11
1659 wakaba 1.36 <p class="note no-ja-translation" data-ja-hash="50ce1d183cf3d8f1223c77ef60fe049a"><span class=en-original lang=en>If the script gets aborted by the "<a href="#kill-a">kill a
1660 wakaba 1.23 worker</a>" algorithm, then that same algorithm will cause there to only
1661     be a single event in the <a href="#queue">queue of events</a> at the
1662 wakaba 1.29 next step, namely the <code title=message-close>close</code> event. The
1663 wakaba 1.30 "<a href="#terminate">terminate a worker</a>" algorithm removes all the
1664 wakaba 1.36 events.</span></p>
1665 wakaba 1.9
1666     <li>
1667 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="ccb4de5e34d7648e416879951c4cd633"><span class=en-original lang=en><i>Event loop</i>: Wait until either there is an event in the <a
1668 wakaba 1.29 href="#queue">queue of events</a> associated with <var title="">worker
1669     global scope</var> or the <var title="">worker global scope</var>'s <a
1670     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag is
1671 wakaba 1.36 set to true.</span></p>
1672 wakaba 1.9
1673     <li>
1674 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="cee49ba92341c5640585c60b4ee41a04"><span class=en-original lang=en>Dispatch the oldest event or callback in the <a href="#queue">queue of
1675 wakaba 1.29 events</a>, if any. The handling of this event or the execution of this
1676     callback might get prematurely aborted by the "<a href="#kill-a">kill a
1677 wakaba 1.30 worker</a>" or "<a href="#terminate">terminate a worker</a>" algorithms
1678 wakaba 1.36 defined below.</span></p>
1679 wakaba 1.9
1680     <li>
1681 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="2dc7477f5e517d12d701596ab83d6b6d"><span class=en-original lang=en>If there are any more events in the <a href="#queue">queue of
1682 wakaba 1.29 events</a> or if the <var title="">worker global scope</var>'s <a
1683     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag is
1684     set to false, then jump back to the step above labeled <i>event
1685 wakaba 1.36 loop</i>.</span></p>
1686 wakaba 1.9
1687     <li>
1688 wakaba 1.36 <p class="big-issue no-ja-translation" data-ja-hash="b78b7b4b40826886318de59b818deb99"><span class=en-original lang=en>timers, intervals, XMLHttpRequests, database
1689     transactions, etc, must be killed; ports must be unentangled</span></p>
1690 wakaba 1.25
1691     <li>
1692 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="9134442891a5c1176a5f8704b230b682"><span class=en-original lang=en>At the next available opportunity, after any scripts have finished
1693 wakaba 1.25 executing<!-- XXX queue -->, <span>fire a simple event</span> called
1694 wakaba 1.29 <code title=event-close>close</code> at all <code><a
1695     href="#worker1">Worker</a></code> or <code><a
1696     href="#sharedworker">SharedWorker</a></code> objects associated with
1697 wakaba 1.36 this worker.</span></p>
1698 wakaba 1.9 </ol>
1699    
1700     <hr>
1701    
1702 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="f73768ff3e63480f0df2f7a5a6b8f919"><span class=en-original lang=en>When a user agent is to <dfn id=kill-a>kill a worker</dfn> it must run
1703 wakaba 1.29 the following steps in parallel with the worker's main loop (the "<a
1704     href="#run-a">run a worker</a>" processing model defined above):
1705    
1706 wakaba 1.36 </span><ol>
1707 wakaba 1.14 <li>
1708 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="90e045f17a39aa8e713406c196a30ec3"><span class=en-original lang=en>Create an <code>Event</code> object with the event name <code
1709 wakaba 1.29 title=event-close>close</code>, which does not bubble and is not
1710 wakaba 1.22 cancelable, and add it to the worker's <code><a
1711     href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1712     href="#queue">queue of events</a>, targetted at the <code><a
1713     href="#workerglobalscope">WorkerGlobalScope</a></code> object itself.
1714 wakaba 1.36 </span></li>
1715 wakaba 1.23 <!-- XXX shouldn't add one if closing is
1716 wakaba 1.29 already true, assuming close has already been added to the queue
1717 wakaba 1.23 (?) -->
1718 wakaba 1.22
1719     <li>
1720 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="6243c3e4951724a3633743634fccb06e"><span class=en-original lang=en>Set the worker's <code><a
1721 wakaba 1.29 href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1722     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag to
1723     true.
1724 wakaba 1.22
1725 wakaba 1.36 </span><li>
1726     <p class="no-ja-translation" data-ja-hash="922d3b59e2016de5b33298ba10ada993"><span class=en-original lang=en>Wait a user-agent-defined amount of time. If the "<a href="#run-a">run
1727 wakaba 1.23 a worker</a>" processing model defined above immediately starts running
1728 wakaba 1.29 event listeners registered for the <code title=event-close>close</code>
1729     event, this time should not be zero &mdash; the idea is that the <code
1730     title=event-close>close</code> event can be used to clean up when
1731     shutting down unexpectedly.
1732    
1733 wakaba 1.36 </span><li>
1734     <p class="no-ja-translation" data-ja-hash="cf1e94de0050557afbc1148079de691d"><span class=en-original lang=en>If there are any events in the <a href="#queue">queue of events</a>
1735 wakaba 1.29 other than the <code title=event-close>close</code> event that this
1736     algorithm just added, discard them without dispatching them.
1737    
1738 wakaba 1.36 </span><li>
1739     <p class="has-ja-translation" data-ja-hash="4351b65cdb5de9c9cdfd3c2a04ad9b6e"><span class=en-original lang=en>If the <code title=event-close>close</code> event that this algorithm
1740 wakaba 1.29 just added hasn't yet been dispatched, then abort the script currently
1741     running in the worker.
1742 wakaba 1.23
1743 wakaba 1.36 </span><span class=ja-translation lang=ja>この算法が追加したばかりの <code title=event-close>close</code>
1744     事象がまだ発送されていなければ、労働者中で現在走っているスクリプトを停止します。</span><li>
1745     <p class="has-ja-translation" data-ja-hash="a53f0acde0e4a21781c4b31d5a0f110a"><span class=en-original lang=en>Wait a user-agent-defined amount of time.
1746 wakaba 1.32
1747     </span><span class=ja-translation lang=ja>利用者エージェント定義の時間、待ちます。</span><li>
1748 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="6f55d58072eaadf9aaac96514d919df8"><span class=en-original lang=en>Abort the script currently running in the worker (if any script is
1749 wakaba 1.29 running, then it will be a handler for the <code
1750     title=event-close>close</code> event).
1751 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者中で現在走っているスクリプトを停止します
1752     (何かスクリプトが走っているとすれば、それは <code
1753     title=event-close>close</code>
1754     事象の取扱器のはずです)。</span></ol>
1755 wakaba 1.9
1756 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="dbf283f17afc05f538d29f85dc0a52bf"><span class=en-original lang=en>User agents may invoke the "<a href="#kill-a">kill a worker</a>"
1757 wakaba 1.22 processing model on a worker at any time, e.g. in response to user
1758     requests, in response to CPU quota management, or when a worker stops
1759 wakaba 1.23 being an <a href="#active">active needed worker</a> if the worker
1760 wakaba 1.29 continues executing even after its <a href="#closing"
1761     title=dom-WorkerGlobalScope-closing>closing</a> flag was set to true.
1762 wakaba 1.16
1763 wakaba 1.36 </span><hr>
1764 wakaba 1.11
1765 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="6e6259fd5536a6ce6726b7f1f7ec2c72"><span class=en-original lang=en>When a user agent is to <dfn id=terminate>terminate a worker</dfn> it
1766 wakaba 1.30 must run the following steps in parallel with the worker's main loop (the
1767     "<a href="#run-a">run a worker</a>" processing model defined above):
1768 wakaba 1.22
1769 wakaba 1.36 </span><ol>
1770 wakaba 1.22 <li>
1771 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="6243c3e4951724a3633743634fccb06e"><span class=en-original lang=en>Set the worker's <code><a
1772 wakaba 1.22 href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1773 wakaba 1.29 href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag to
1774     true.
1775 wakaba 1.22
1776 wakaba 1.36 </span><li>
1777     <p class="no-ja-translation" data-ja-hash="cf1e94de0050557afbc1148079de691d"><span class=en-original lang=en>If there are any events in the <a href="#queue">queue of events</a>
1778 wakaba 1.29 other than the <code title=event-close>close</code> event that this
1779     algorithm just added, discard them without dispatching them.
1780 wakaba 1.22
1781 wakaba 1.36 </span><li>
1782     <p class="has-ja-translation" data-ja-hash="fcb471f3c8cace3a86095dcb29d25515"><span class=en-original lang=en>Abort the script currently running in the worker.
1783     </span><span class=ja-translation lang=ja>労働者中で現在走っているスクリプトを停止します。</span></ol>
1784 wakaba 1.11
1785 wakaba 1.36 <h3 id=creating class="has-ja-translation" data-ja-hash="f0a4732d38d01e3d103b68468f9fe234"><span class=en-original lang=en><span class=secno>2.6 </span>Creating workers</span><span class=ja-translation lang=ja><span class=secno>2.6 </span>労働者の作成</span></h3>
1786 wakaba 1.9
1787 wakaba 1.36 <h4 id=the-abstractworker class="has-ja-translation" data-ja-hash="fe5227371e801f4ac588d0d07472a900" data-ja-real-hash="9a7040b26903cb67873e70582b2e3a5b"><span class=en-original lang=en><span class=secno>2.6.1 </span>The <code><a
1788     href="#abstractworker">AbstractWorker</a></code> abstract interface</span><span class=ja-translation lang=ja><span class=secno>2.6.1 </span><code><a href="#abstractworker">AbstractWorker</a></code> 抽象界面</span></h4>
1789 wakaba 1.29
1790 wakaba 1.9 <pre
1791 wakaba 1.36 class="idl no-ja-translation" data-ja-hash="ca053e27763a221f744b59e28b9f1149"><span class=en-original lang=en>[NoInterfaceObject] interface <dfn id=abstractworker>AbstractWorker</dfn> {
1792 wakaba 1.29 attribute <span>EventListener</span> <a href="#onerror" title=handler-AbstractWorker-onerror>onerror</a>;
1793     attribute <span>EventListener</span> <a href="#onclose0" title=handler-AbstractWorker-onclose>onclose</a>;
1794 wakaba 1.36 };</span></pre>
1795 wakaba 1.29
1796 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="e39a76d762bfd9fb1a4ef6442ded36b3"><span class=en-original lang=en>Objects implementing the <code><a
1797     href="#abstractworker">AbstractWorker</a></code> interface must also
1798     implement the <code>EventTarget</code> interface.
1799    
1800     </span><p class="no-ja-translation" data-ja-hash="4f7356effb9eccb6268b11a363b0c51d"><span class=en-original lang=en>The following are the <span>event handler DOM attributes</span> that
1801 wakaba 1.29 must be supported by objects implementing the <code><a
1802     href="#abstractworker">AbstractWorker</a></code> interface:
1803    
1804 wakaba 1.36 </span><dl>
1805     <dt class="no-ja-translation" data-ja-hash="ca77fdf585a46daf6ec6823b345faf98"><span class=en-original lang=en><dfn id=onerror
1806 wakaba 1.29 title=handler-AbstractWorker-onerror><code>onerror</code></dfn>
1807    
1808 wakaba 1.36 </span><dd>
1809     <p class="no-ja-translation" data-ja-hash="3998f6cd6a9193846f5e07b04202500c"><span class=en-original lang=en>Must be invoked whenever an <code title=event-error>error</code> event
1810 wakaba 1.29 is targeted at or bubbles through the <code><a
1811     href="#abstractworker">AbstractWorker</a></code> object.
1812    
1813 wakaba 1.36 </span><dt class="no-ja-translation" data-ja-hash="a66f8d800a45cc2273dc71888c78ecd0"><span class=en-original lang=en><dfn id=onclose0
1814 wakaba 1.29 title=handler-AbstractWorker-onclose><code>onclose</code></dfn>
1815    
1816 wakaba 1.36 </span><dd>
1817     <p class="no-ja-translation" data-ja-hash="90325fa5f5171b4f558eabaeac83bba8"><span class=en-original lang=en>Must be invoked whenever an <code title=event-close>close</code> event
1818 wakaba 1.29 is targeted at or bubbles through the <code><a
1819     href="#abstractworker">AbstractWorker</a></code> object.
1820 wakaba 1.36 </span></dl>
1821 wakaba 1.25
1822 wakaba 1.36 <h4 id=dedicated0 class="no-ja-translation" data-ja-hash="a19aaade72c8a5d27a02c8d16642f277"><span class=en-original lang=en><span class=secno>2.6.2 </span>Dedicated workers and the
1823     <code><a href="#worker1">Worker</a></code> interface</span></h4>
1824 wakaba 1.25
1825 wakaba 1.42 <pre class="idl no-ja-translation" data-ja-hash="32d3d5044c9b55b10e14109dbfa650ff"><span class=en-original lang=en>[NoInterfaceObject,
1826 wakaba 1.29 <a href="#worker2" title=dom-Worker>Constructor</a>(in DOMString scriptURL)]
1827     interface <dfn id=worker1>Worker</dfn> : <a href="#abstractworker">AbstractWorker</a> {
1828 wakaba 1.42 void <a href="#terminate0" title=dom-Worker-terminate>terminate</a>();
1829 wakaba 1.29
1830 wakaba 1.30 void <a href="#postmessage0" title=dom-Worker-postMessage>postMessage</a>(in DOMString message);
1831 wakaba 1.42 void <a href="#postmessage0" title=dom-Worker-postMessage>postMessage</a>(in DOMString message, in <span>MessagePort</span> messagePort);<!--
1832     <span>MessagePort</span> <span title="dom-Worker-startConversation">startConversation</span>(in DOMString message);-->
1833 wakaba 1.29 attribute <span>EventListener</span> <a href="#onmessage0" title=handler-Worker-onmessage>onmessage</a>;
1834 wakaba 1.36 };</span></pre>
1835 wakaba 1.9
1836 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="de30b8d41bcd89009d2aef1d62ea0b46"><span class=en-original lang=en>The <dfn id=terminate0
1837     title=dom-Worker-terminate><code>terminate()</code></dfn> method, when
1838     invoked, must cause the "<a href="#terminate">terminate a worker</a>"
1839     algorithm to be run on the worker with with the object is associated.
1840 wakaba 1.29
1841 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="5bc910b7c194db663b68f5a7d4c10a61"><span class=en-original lang=en><code><a href="#worker1">Worker</a></code> objects act as if they had an
1842 wakaba 1.29 implicit <code>MessagePort</code> associated with them. This port is part
1843     of a channel that is set up when the worker is created, but it is not
1844     exposed. This object must never be garbage collected before the <code><a
1845     href="#worker1">Worker</a></code> object.
1846    
1847 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="6913e4a1e1b8f864b65900e6b4f480ed"><span class=en-original lang=en>All messages received by that port must immediately be retargetted at
1848 wakaba 1.29 the <code><a href="#worker1">Worker</a></code> object.
1849    
1850 wakaba 1.42 </span><p class="no-ja-translation" data-ja-hash="5e032d219f702b8b96f218aacfba4c26"><span class=en-original lang=en>The <dfn id=postmessage0
1851     title=dom-Worker-postMessage><code>postMessage()</code></dfn><!--
1852     and <dfn
1853     title="dom-Worker-startConversation"><code>startConversation()</code></dfn>-->
1854     method<!--s (startConversation)--> on <code><a
1855     href="#worker1">Worker</a></code> objects must act as if, when invoked,
1856     it<!--/they (startConversation)--> immediately invoked the method of the
1857     same name on the port, with the same arguments, and returned the same
1858     return value.
1859 wakaba 1.29
1860 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="e5b4a11fecaff5acef7e63837606f9a6"><span class=en-original lang=en>The following are the <span>event handler DOM attributes</span> that
1861 wakaba 1.29 must be supported by objects implementing the <code><a
1862     href="#worker1">Worker</a></code> interface:
1863    
1864 wakaba 1.36 </span><dl>
1865     <dt class="no-ja-translation" data-ja-hash="1e7efb7f0b77ed1e6f543f6c9cc3387e"><span class=en-original lang=en><dfn id=onmessage0
1866 wakaba 1.29 title=handler-Worker-onmessage><code>onmessage</code></dfn>
1867    
1868 wakaba 1.36 </span><dd>
1869     <p class="has-ja-translation" data-ja-hash="91a2ce3a21f7ed687afe756baa5387d8" data-ja-real-hash="c68f92321aa3d122a0022259f645a1d2"><span class=en-original lang=en>Must be invoked whenever a <code
1870 wakaba 1.32 title=event-Worker-message>message</code> event is targeted at or
1871     bubbles through the <code><a href="#worker1">Worker</a></code> object.
1872     </span><span class=ja-translation lang=ja><code title=event-Worker-message>message</code> 事象が当該 <code><a href="#worker1">Worker</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1873 wakaba 1.29 呼び出されなければなりません。</span></dl>
1874 wakaba 1.22
1875     <hr>
1876 wakaba 1.13
1877 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="82fcc98f85490bca63805a347135340d"><span class=en-original lang=en>When the <dfn id=worker2 title=dom-Worker><code>Worker(<var
1878 wakaba 1.29 title="">scriptURL</var>)</code></dfn> constructor is invoked, the user
1879     agent must run the following steps:
1880    
1881 wakaba 1.36 </span><ol>
1882 wakaba 1.13 <li>
1883 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="3219e42f1040482201a693e248f580cb"><span class=en-original lang=en><span title="resolve a url">Resolve</span> the <var
1884 wakaba 1.32 title="">scriptURL</var> argument.
1885    
1886     </span><span class=ja-translation lang=ja><var
1887 wakaba 1.15 title="">scriptURL</var> 引数を<span title="resolve a url">解決</span>します。</span><li>
1888 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="160444b5a61c1e71f39825a01936237f"><span class=en-original lang=en>If this fails, throw a <code>SYNTAX_ERR</code> exception.
1889 wakaba 1.32
1890     </span><span class=ja-translation lang=ja>これが失敗した場合、 <code>SYNTAX_ERR</code>
1891 wakaba 1.15 例外を投げます。</span><li>
1892 wakaba 1.36 <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 URL</span>
1893 wakaba 1.29 is not the <span title="same origin">same</span> as the origin of the
1894     script that invoked the constructor, then throw a <span>security
1895     exception</span>.
1896    
1897 wakaba 1.36 </span><li>
1898     <p class="no-ja-translation" data-ja-hash="d7b9bc07a489235fdd4d6ecb508f1a86"><span class=en-original lang=en><span>Create a new <code><a
1899 wakaba 1.29 href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1900     object</span>. Let this be the <var title="">worker global scope</var>.
1901    
1902 wakaba 1.36 </span><li>
1903     <p class="no-ja-translation" data-ja-hash="925e7c1609162a4bcadfcf3e85572a16"><span class=en-original lang=en>Create a new <code><a href="#worker1">Worker</a></code> object,
1904 wakaba 1.29 associated with <var title="">worker global scope</var>. Let this
1905     <code><a href="#worker1">Worker</a></code> object be <var
1906     title="">worker</var>.
1907    
1908 wakaba 1.36 </span><li>
1909     <p class="no-ja-translation" data-ja-hash="07cc057567324a83e25ec6344dc011a7"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by the
1910 wakaba 1.29 <span>script execution context</span> of the script that invoked the
1911     method. Let this be the <var title="">outside port</var>.
1912    
1913 wakaba 1.36 </span><li>
1914     <p class="has-ja-translation" data-ja-hash="91024eaaebdc23ea683ace1b3e316962"><span class=en-original lang=en>Associate the <var title="">outside port</var> with <var
1915 wakaba 1.29 title="">worker</var>.
1916    
1917 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">outside port</var> を <var
1918     title="">worker</var> に関連付けます。</span><li>
1919 wakaba 1.37 <p class="has-ja-translation" data-ja-hash="e87b6ef3fda022b070571262147c6f22"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by the
1920 wakaba 1.29 <var title="">worker global scope</var>. Let this be the <var
1921     title="">inside port</var>.
1922    
1923 wakaba 1.37 </span><span class=ja-translation lang=ja><var title="">worker global scope</var> が所有する
1924     <span><code>MessagePort</code> オブジェクトを作成</span>します。
1925     これを <var
1926     title="">inside port</var> とします。</span><li>
1927 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="047476799040ed3c8f2b583408be732a"><span class=en-original lang=en>Associate the <var title="">inside port</var> with <var
1928 wakaba 1.29 title="">worker global scope</var>.
1929    
1930 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">inside port</var> を <var
1931     title="">worker global scope</var> に関連付けます。</span><li>
1932     <p class="no-ja-translation" data-ja-hash="bf2642ced659847cb4402165d2ab3a8e"><span class=en-original lang=en><span>Entangle</span> <var title="">outside port</var> and <var
1933 wakaba 1.29 title="">inside port</var>.
1934    
1935 wakaba 1.36 </span><li>
1936     <p class="has-ja-translation" data-ja-hash="2c5bd80faeda34c67a2533f32a477c51"><span class=en-original lang=en>Return <var title="">worker</var>, and run the following steps
1937 wakaba 1.29 asynchronously.
1938    
1939 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を返し、以降の段階を非同期に走らせます。</span><li>
1940     <p class="has-ja-translation" data-ja-hash="faa1ae1399f8e4f6b212fe45bba07893"><span class=en-original lang=en>Open <var title="">inside port</var>'s <span>port message
1941 wakaba 1.29 queue</span>.
1942    
1943 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">inside port</var> の<span>ポート・メッセージ待ち行列</span>を開きます。</span><li>
1944     <p class="has-ja-translation" data-ja-hash="5eaa92a75cbbf580809052327262059a"><span class=en-original lang=en>Open <var title="">outside port</var>'s <span>port message
1945 wakaba 1.30 queue</span>.
1946    
1947 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">outside port</var> の<span>ポート・メッセージ待ち行列</span>を開きます。</span><li>
1948     <p class="no-ja-translation" data-ja-hash="5dde6963d0fd86935486ce9c7473b40e"><span class=en-original lang=en><a href="#run-a">Run a worker</a>, with the <span>script browsing
1949 wakaba 1.30 context</span> of the script that invoked the method as the <var
1950     title="">owner browsing context</var>, with the <span>script document
1951     context</span> of the script that invoked the method as the <var
1952     title="">owner document</var>, and with <var title="">worker global
1953 wakaba 1.36 scope</var> as the global scope.</span></p>
1954 wakaba 1.25 </ol>
1955 wakaba 1.11
1956 wakaba 1.36 <h4 id=shared1 class="no-ja-translation" data-ja-hash="660755479f7743bee608286560e94bfd"><span class=en-original lang=en><span class=secno>2.6.3 </span>Shared workers and the
1957     <code><a href="#sharedworker">SharedWorker</a></code> interface</span></h4>
1958 wakaba 1.29
1959 wakaba 1.36 <pre class="idl no-ja-translation" data-ja-hash="e9f64514cc5486960acf6e0d6fda83c8"><span class=en-original lang=en>[NoInterfaceObject,
1960 wakaba 1.29 <a href="#sharedworker0" title=dom-SharedWorker>Constructor</a>(in DOMString scriptURL, in DOMString name)]
1961     interface <dfn id=sharedworker>SharedWorker</dfn> : <a href="#abstractworker">AbstractWorker</a> {
1962     readonly attribute <code>MessagePort</code> <a href="#port" title=dom-SharedWorker-port>port</a>;
1963 wakaba 1.36 };</span></pre>
1964 wakaba 1.29
1965 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="fa90f278bf10ccc803f16340cb3454f3"><span class=en-original lang=en>The <dfn id=port title=dom-SharedWorker-port><code>port</code></dfn>
1966 wakaba 1.29 attribute must return the value it was assigned by the object's
1967     constructor. It represents the <code>MessagePort</code> for communicating
1968     with the shared worker.
1969    
1970 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="ec56f4c5071ac285686586d381295796"><span class=en-original lang=en>When the <dfn id=sharedworker0
1971 wakaba 1.29 title=dom-SharedWorker><code>SharedWorker(<var title="">scriptURL</var>,
1972     <var title="">name</var>)</code></dfn> constructor is invoked, the user
1973     agent must run the following steps:
1974 wakaba 1.11
1975 wakaba 1.36 </span><ol>
1976 wakaba 1.13 <li>
1977 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="3219e42f1040482201a693e248f580cb"><span class=en-original lang=en><span title="resolve a url">Resolve</span> the <var
1978 wakaba 1.32 title="">scriptURL</var> argument.
1979    
1980     </span><span class=ja-translation lang=ja><var
1981 wakaba 1.15 title="">scriptURL</var> 引数を<span title="resolve a url">解決</span>します。</span><li>
1982 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="160444b5a61c1e71f39825a01936237f"><span class=en-original lang=en>If this fails, throw a <code>SYNTAX_ERR</code> exception.
1983 wakaba 1.32
1984     </span><span class=ja-translation lang=ja>これが失敗した場合、 <code>SYNTAX_ERR</code>
1985 wakaba 1.15 例外を投げます。</span><li>
1986 wakaba 1.36 <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 URL</span>
1987 wakaba 1.29 is not the <span title="same origin">same</span> as the origin of the
1988     script that invoked the constructor, then throw a <span>security
1989     exception</span>.
1990    
1991 wakaba 1.36 </span><li>
1992     <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>
1993 wakaba 1.13
1994     <ol>
1995     <li>
1996 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="2800d1a8667906afc331a67e21d9ea29"><span class=en-original lang=en>Create a new <code><a href="#sharedworker">SharedWorker</a></code>
1997 wakaba 1.29 object, which will shortly be associated with a <code><a
1998     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
1999     object. Let this <code><a href="#sharedworker">SharedWorker</a></code>
2000     object be <var title="">worker</var>.
2001 wakaba 1.22
2002 wakaba 1.36 </span><li>
2003     <p class="no-ja-translation" data-ja-hash="07cc057567324a83e25ec6344dc011a7"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by the
2004 wakaba 1.29 <span>script execution context</span> of the script that invoked the
2005     method. Let this be the <var title="">outside port</var>.
2006 wakaba 1.25
2007 wakaba 1.36 </span><li>
2008     <p class="no-ja-translation" data-ja-hash="95cd5e27932141432ed9ff6323032568"><span class=en-original lang=en>Assign <var title="">outside port</var> to the <code
2009 wakaba 1.29 title=dom-SharedWorker-port><a href="#port">port</a></code> attribute
2010     of <var title="">worker</var>.
2011 wakaba 1.25
2012 wakaba 1.36 </span><li>
2013     <p class="no-ja-translation" data-ja-hash="5aec0369bd40bfd0f0ff2dc70f75b9f5"><span class=en-original lang=en>If there exists a <code><a
2014 wakaba 1.29 href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
2015     object whose <a href="#closing"
2016     title=dom-WorkerGlobalScope-closing>closing</a> flag is false, whose
2017     <code title=dom-WorkerGlobalScope-name>name</code> attribute is
2018     exactly equal to the <var title="">name</var> argument, and whose
2019     <code title=dom-WorkerGlobalScope-location><a
2020     href="#location">location</a></code> attribute represents an
2021     <span>absolute URL</span> that has the <span>same origin</span> as the
2022 wakaba 1.36 resulting <span>absolute URL</span>, then run these substeps:</span></p>
2023 wakaba 1.25
2024 wakaba 1.29 <ol>
2025     <li>
2026 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="826754f668578065470b1f9de24553bc"><span class=en-original lang=en>Let <var title="">worker global scope</var> be that <code><a
2027 wakaba 1.29 href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
2028     object.
2029    
2030 wakaba 1.36 </span><li>
2031     <p class="no-ja-translation" data-ja-hash="7b6f8fa4ae92ed20dd16a2fb90c3e618"><span class=en-original lang=en>If <var title="">worker global scope</var>'s <code
2032 wakaba 1.29 title=dom-WorkerGlobalScope-location><a
2033     href="#location">location</a></code> attribute represents an
2034     <span>absolute URL</span> that is not exactly equal to the resulting
2035     <span>absolute URL</span>, then throw a
2036     <code>URL_MISMATCH_ERR</code> exception and abort all these steps.
2037     <span class=big-issue>code 21</span>
2038    
2039 wakaba 1.36 </span><li>
2040     <p class="has-ja-translation" data-ja-hash="9c4f87efaa1e868cd6bf63dbffa749c0"><span class=en-original lang=en>Associate <var title="">worker</var> with <var title="">worker
2041 wakaba 1.29 global scope</var>.
2042    
2043 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を <var title="">worker
2044     global scope</var> に関連付けます。</span><li>
2045 wakaba 1.37 <p class="has-ja-translation" data-ja-hash="e87b6ef3fda022b070571262147c6f22"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by the
2046 wakaba 1.29 <var title="">worker global scope</var>. Let this be the <var
2047     title="">inside port</var>.
2048    
2049 wakaba 1.37 </span><span class=ja-translation lang=ja><var title="">worker global scope</var> が所有する
2050     <span><code>MessagePort</code> オブジェクトを作成</span>します。
2051     これを <var
2052     title="">inside port</var> とします。</span><li>
2053 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="bf2642ced659847cb4402165d2ab3a8e"><span class=en-original lang=en><span>Entangle</span> <var title="">outside port</var> and <var
2054 wakaba 1.29 title="">inside port</var>.
2055    
2056 wakaba 1.36 </span><li>
2057     <p class="has-ja-translation" data-ja-hash="ebb713e9e29aab450d79b533c42b67ae"><span class=en-original lang=en>Return <var title="">worker</var> and perform the next step
2058 wakaba 1.29 asynchronously.
2059    
2060 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を返し、
2061     次の段階を非同期に実行します。</span><li>
2062     <p class="no-ja-translation" data-ja-hash="3b59bbc8dc9af6fb95a0a13c18150f55"><span class=en-original lang=en>Create an event that uses the <code>MessageEvent</code> interface,
2063 wakaba 1.29 with the name <code title=event-connect>connect</code>, which does
2064     not bubble, is cancelable, has no default action, has a <code
2065     title=dom-MessageEvent-data>data</code> attribute whose value is the
2066     empty string and has a <code
2067     title=dom-MessageEvent-messagePort>messagePort</code> attribute
2068     whose value is the newly created port, and add it to <var
2069     title="">worker global scope</var>'s <a href="#queue">queue of
2070     events</a>, targetted at the <var title="">worker global scope</var>
2071     itself.
2072    
2073 wakaba 1.36 </span><li>
2074     <p class="has-ja-translation" data-ja-hash="dd866391287c967d4799df78a7249911"><span class=en-original lang=en>Abort all these steps.
2075     </span><span class=ja-translation lang=ja>これらの段階をすべて停止します。</span></ol>
2076 wakaba 1.11
2077 wakaba 1.29 <li>
2078 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="9dd8cf11e82f420b740d38c627bdbd31"><span class=en-original lang=en><span>Create a new <code><a
2079 wakaba 1.29 href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
2080     object</span>. Let this be the <var title="">worker global
2081     scope</var>.
2082 wakaba 1.11
2083 wakaba 1.36 </span><li>
2084     <p class="has-ja-translation" data-ja-hash="9c4f87efaa1e868cd6bf63dbffa749c0"><span class=en-original lang=en>Associate <var title="">worker</var> with <var title="">worker
2085 wakaba 1.29 global scope</var>.
2086 wakaba 1.23
2087 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を <var title="">worker
2088     global scope</var> に関連付けます。</span><li>
2089     <p class="no-ja-translation" data-ja-hash="41bc5a86cc5d47bc40691672571f6352"><span class=en-original lang=en>Set the <code title=dom-SharedWorkerGlobalScope-name><a
2090 wakaba 1.29 href="#name">name</a></code> attribute of <var title="">worker global
2091     scope</var> be <var title="">name</var>.
2092 wakaba 1.11
2093 wakaba 1.36 </span><li>
2094 wakaba 1.37 <p class="has-ja-translation" data-ja-hash="e87b6ef3fda022b070571262147c6f22"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by the
2095 wakaba 1.29 <var title="">worker global scope</var>. Let this be the <var
2096     title="">inside port</var>.
2097 wakaba 1.11
2098 wakaba 1.37 </span><span class=ja-translation lang=ja><var title="">worker global scope</var> が所有する
2099     <span><code>MessagePort</code> オブジェクトを作成</span>します。
2100     これを <var
2101     title="">inside port</var> とします。</span><li>
2102 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="bf2642ced659847cb4402165d2ab3a8e"><span class=en-original lang=en><span>Entangle</span> <var title="">outside port</var> and <var
2103 wakaba 1.29 title="">inside port</var>.
2104 wakaba 1.36 </span></ol>
2105 wakaba 1.13
2106     <li>
2107 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="ebb713e9e29aab450d79b533c42b67ae"><span class=en-original lang=en>Return <var title="">worker</var> and perform the next step
2108 wakaba 1.29 asynchronously.
2109 wakaba 1.25
2110 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を返し、
2111     次の段階を非同期に実行します。</span><li>
2112     <p class="no-ja-translation" data-ja-hash="3b59bbc8dc9af6fb95a0a13c18150f55"><span class=en-original lang=en>Create an event that uses the <code>MessageEvent</code> interface,
2113 wakaba 1.22 with the name <code title=event-connect>connect</code>, which does not
2114     bubble, is cancelable, has no default action, has a <code
2115     title=dom-MessageEvent-data>data</code> attribute whose value is the
2116     empty string and has a <code
2117     title=dom-MessageEvent-messagePort>messagePort</code> attribute whose
2118 wakaba 1.29 value is the newly created port, and add it to <var title="">worker
2119     global scope</var>'s <a href="#queue">queue of events</a>, targetted at
2120     the <var title="">worker global scope</var> itself.
2121 wakaba 1.23
2122 wakaba 1.36 </span><li>
2123     <p class="no-ja-translation" data-ja-hash="5dde6963d0fd86935486ce9c7473b40e"><span class=en-original lang=en><a href="#run-a">Run a worker</a>, with the <span>script browsing
2124 wakaba 1.30 context</span> of the script that invoked the method as the <var
2125     title="">owner browsing context</var>, with the <span>script document
2126     context</span> of the script that invoked the method as the <var
2127     title="">owner document</var>, and with <var title="">worker global
2128 wakaba 1.36 scope</var> as the global scope.</span></p>
2129 wakaba 1.22 </ol>
2130 wakaba 1.15
2131 wakaba 1.36 <h2 id=apis-available class="has-ja-translation" data-ja-hash="4fce100e6a2eccbb2df8631a438feeb6"><span class=en-original lang=en><span class=secno>3. </span>APIs available to workers</span><span class=ja-translation lang=ja><span class=secno>3. </span>労働者が利用可能な API</span></h2>
2132 wakaba 1.15
2133 wakaba 1.22 <pre
2134 wakaba 1.42 class="idl no-ja-translation" data-ja-hash="3182eceee661d96bf5db761b66eb5082"><span class=en-original lang=en>[NoInterfaceObject] interface <dfn id=workerutils>WorkerUtils</dfn> {
2135 wakaba 1.25 void <a href="#importscripts" title=dom-WorkerGlobalScope-importScripts>importScripts</a>([Variadic] in DOMString urls);
2136 wakaba 1.22 readonly attribute <span>Storage</span> <a href="#localstorage" title=dom-localStorage>localStorage</a>;
2137 wakaba 1.42 readonly attribute <a href="#navigator0">Navigator</a> <a href="#navigator" title=dom-navigator>navigator</a>;
2138 wakaba 1.22 <span>Database</span> <a href="#opendatabase" title=dom-opendatabase>openDatabase</a>(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize);
2139     void <a href="#shownotification" title=dom-showNotification>showNotification</a>(in DOMString title, in DOMString subtitle, in DOMString description);
2140     void <a href="#shownotification" title=dom-showNotification>showNotification</a>(in DOMString title, in DOMString subtitle, in DOMString description, in VoidCallback onclick);
2141 wakaba 1.36 };</span></pre>
2142 wakaba 1.16
2143 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="fc1e0d30e2c0869e54fb2487a7dd6836" data-ja-real-hash="43ee0f4f7856a9484e5ed892bc4ab914"><span class=en-original lang=en>Objects that implement the <code><a
2144 wakaba 1.32 href="#workerglobalscope">WorkerGlobalScope</a></code> interface must also
2145     implement the <code><a href="#workerutils">WorkerUtils</a></code>
2146     interface.
2147    
2148 wakaba 1.42 </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 class="no-ja-translation" data-ja-hash="ee5c969b7e5c71d39f0fe9919b1173fe"><span class=en-original lang=en>Objects that implement the <code><a
2149     href="#workerutils">WorkerUtils</a></code> interface must also implement
2150     the <code>WindowTimers</code> interface. (This interface provides the
2151     <code title="">setTimeout()</code> method and its friends.)
2152 wakaba 1.16
2153 wakaba 1.42 </span><p class="big-issue no-ja-translation" data-ja-hash="fffa5f76ab27c1602edf28b5c8fbcc6d"><span class=en-original lang=en>Need to define a sync database API.</span></p>
2154 wakaba 1.16 <!-- XXX ApplicationCache -->
2155     <!-- XXX a way to set cookies on the URL for the script -->
2156     <!-- XXX debugging: void log(in DOMString s); // log to console -->
2157     <!-- XXX debugging: onerror -->
2158    
2159     <hr>
2160    
2161 wakaba 1.36 <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> objects,
2162 wakaba 1.32 etc) are not available to workers in this version of this specification.
2163    
2164     </span><span class=ja-translation lang=ja>DOM API (<code>Node</code> オブジェクト、 <code>Document</code>
2165 wakaba 1.36 オブジェクト、その他) は、この版のこの仕様書では労働者に利用可能ではありません。</span><h3 id=importing class="has-ja-translation" data-ja-hash="e7522d998689dc52be80feeff81470ca"><span class=en-original lang=en><span class=secno>3.1 </span>Importing scripts and
2166     libraries</span><span class=ja-translation lang=ja><span class=secno>3.1 </span>スクリプトとライブラリーの輸入</span></h3>
2167 wakaba 1.22
2168 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="a50ee5d5d404f735326c6d0cb9ede11c"><span class=en-original lang=en>When a script invokes the <dfn id=importscripts
2169 wakaba 1.25 title=dom-WorkerGlobalScope-importScripts><code>importScripts(<var
2170     title="">urls</var>)</code></dfn> method on a <code><a
2171 wakaba 1.22 href="#workerglobalscope">WorkerGlobalScope</a></code> object, the user
2172     agent must run the following steps:
2173    
2174 wakaba 1.36 </span><ol>
2175 wakaba 1.22 <li>
2176 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="143a8bb07f4501807d2bbf2d2d2b345a"><span class=en-original lang=en>If there are no arguments, return without doing anything. Abort these
2177 wakaba 1.25 steps.
2178    
2179 wakaba 1.36 </span><span class=ja-translation lang=ja>引数がない場合、何も返さずに返ります。
2180     これらの段階を停止します。</span><li>
2181     <p class="has-ja-translation" data-ja-hash="b89818b453add85fbb5ec1e963e3072c"><span class=en-original lang=en><span title="resolve a url">Resolve</span> each argument.
2182 wakaba 1.22
2183 wakaba 1.36 </span><span class=ja-translation lang=ja>各引数を<span title="resolve a url">解決</span>します。</span><li>
2184     <p class="has-ja-translation" data-ja-hash="54adea3a3a07dd8833ad87eb937142f1"><span class=en-original lang=en>If any fail, throw a <code>SYNTAX_ERR</code> exception.
2185 wakaba 1.22
2186 wakaba 1.36 </span><span class=ja-translation lang=ja>いずれかが失敗した場合、 <code>SYNTAX_ERR</code> 例外を投げます。</span><li>
2187     <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
2188 wakaba 1.25 URLs</span> have an <span>origin</span> that is not the <span
2189     title="same origin">same</span> as the origin of the script that invoked
2190     the method, then throw a <span>security exception</span>.
2191 wakaba 1.36 </span><span class=ja-translation lang=ja>結果として得られた<span title="absolute URL">絶対
2192     URL</span>
2193     のいずれかが、メソッドを呼び出したスクリプトの<span>origin</span>と<span
2194     title="same origin">同じ</span>ではない起源を持つ場合、
2195 wakaba 1.42 <span>保安性例外</span>を投げます。</span></li>
2196     <!-- XXX why? -->
2197    
2198     <li>
2199 wakaba 1.36 <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
2200     resulting <span title="absolute URLs">absolute URL</span>.</span><span class=ja-translation lang=ja>結果として得られた<span title="absolute URLs">絶対 URL</span>
2201     によって識別される資源をそれぞれ<span>取得</span>しようと試みます。</span></p>
2202 wakaba 1.22
2203     <li>
2204 wakaba 1.36 <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 the first
2205     one, run these substeps:</span><span class=ja-translation lang=ja>各引数について、与えられた順に最初のものから、次の部分段階群を走らせます。</span></p>
2206 wakaba 1.25
2207     <ol>
2208     <li>
2209 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="a5cd8fb5d75985afdc62f7ac228329d4"><span class=en-original lang=en>Wait for the fetching attempt for the corresponding resource to
2210     complete.</span><span class=ja-translation lang=ja>対応する資源を取得しようとする試みが完了するのを待ちます。</span></p>
2211 wakaba 1.25
2212 wakaba 1.39 <p class="no-ja-translation" data-ja-hash="84582a089d9409afcec095d32456d87d"><span class=en-original lang=en>If the fetching attempt failed, throw a <code>NETWORK_ERR</code>
2213 wakaba 1.26 exception and abort all these steps. <a
2214     href="#refsXHR">[XHR]</a><!-- XXX get DOM Core updated instead
2215 wakaba 1.36 --></span></p>
2216 wakaba 1.25
2217 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="3b806ac3639f6a9110a968f4676bb0a2"><span class=en-original lang=en>If the fetching attempt succeeded, then let <var
2218     title="">script</var> be the resource that was obtained.</span><span class=ja-translation lang=ja>取得の試みが成功した場合、 <var
2219     title="">script</var> を、得られた資源とします。</span></p>
2220    
2221     <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 always
2222     assumed to be JavaScript, regardless of the MIME type.</span><span class=ja-translation lang=ja>労働者のスクリプトと同じく、ここでのスクリプトも、 MIME 型に関わらず常に
2223     JavaScript であるとみなします。</span></p>
2224 wakaba 1.25 <!-- XXX -->
2225    
2226     <li>
2227 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="d806bc2f0c51e55fe69ffd7270a7713c"><span class=en-original lang=en>Let <var title="">script</var>'s <span>script execution
2228 wakaba 1.31 context</span>, <span>script browsing context</span>, and <span>script
2229     document context</span> be the same as for the script that was
2230     executed by the <a href="#run-a">run a worker</a> processing model for
2231 wakaba 1.36 this worker.</span></p>
2232 wakaba 1.22
2233 wakaba 1.25 <li>
2234 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="62a5b9c0a5c65715616c3765573858ea"><span class=en-original lang=en>Parse and execute <var title="">script</var> until it either
2235     returns, fails to parse, fails to catch an exception, or gets
2236     prematurely aborted by the "<a href="#kill-a">kill a worker</a>" or
2237     "<a href="#terminate">terminate a worker</a>" algorithms defined
2238     above.</span></p>
2239    
2240     <p class="no-ja-translation" data-ja-hash="41014f4a697396a3e02475a4d61a7472"><span class=en-original lang=en>If it failed to parse, then throw a
2241     <code>SyntaxError</code><!-- XXX ref? --> exception and abort all
2242     these steps.</span></p>
2243 wakaba 1.25
2244 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="c7d543d741a3d731cce1fac38ebfcb64"><span class=en-original lang=en>If an exception was raised or if the script was prematurely aborted,
2245 wakaba 1.25 then abort all these steps, letting the exception or aborting continue
2246     to be processed by the script that called the <code
2247     title=dom-WorkerGlobalScope-importScripts><a
2248 wakaba 1.36 href="#importscripts">importScripts()</a></code> method.</span></p>
2249 wakaba 1.22
2250 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="468ae33f57bcaf9bf43e2113273491a6"><span class=en-original lang=en>If the "<a href="#kill-a">kill a worker</a>" or "<a
2251     href="#terminate">terminate a worker</a>" algorithms abort the script
2252 wakaba 1.36 then abort all these steps.</span></p>
2253 wakaba 1.25 </ol>
2254 wakaba 1.22 </ol>
2255    
2256 wakaba 1.42 <h3 id=the-navigator class="no-ja-translation" data-ja-hash="920dd52a11144ff4776fa357ce6245e1"><span class=en-original lang=en><span class=secno>3.2 </span>The <code><a
2257     href="#navigator0">Navigator</a></code> object</span></h3>
2258    
2259     <p class="no-ja-translation" data-ja-hash="2affbf4546661b0d28c37da361b1cf65"><span class=en-original lang=en>The <dfn id=navigator title=dom-navigator><code>navigator</code></dfn>
2260     attribute of the <code><a href="#workerutils">WorkerUtils</a></code>
2261     interface must return an instance of the <code><a
2262     href="#navigator0">Navigator</a></code> interface, which represents the
2263     identity and state of the user agent (the client):
2264    
2265     </span><pre
2266     class="idl no-ja-translation" data-ja-hash="bec6e4722ba670204ba345972b2f5b62"><span class=en-original lang=en>[NoInterfaceObject] interface <dfn id=navigator0>Navigator</dfn> {
2267     // objects implementing this interface also implement the interfaces listed below
2268     };</span></pre>
2269    
2270     <p class="no-ja-translation" data-ja-hash="cc1c14039bdbf516ffffc18ed475544f"><span class=en-original lang=en>Objects implementing the <code><a
2271     href="#navigator0">Navigator</a></code> interface must also implement the
2272     <span>NavigatorID</span> and <span>NavigatorOnLine</span> interfaces
2273     specified in the HTML5 specification. <a href="#refsHTML5">[HTML5]</a>
2274    
2275     </span><p class="note no-ja-translation" data-ja-hash="0b5a83138f5e72c3cbeff9a2b59e9920"><span class=en-original lang=en>The <code><a href="#navigator0">Navigator</a></code>
2276     interface defined in this specification is different than the one defined
2277     in the HTML5 specification.
2278    
2279     </span><h3 id=apis-defined class="has-ja-translation" data-ja-hash="d6d6885373ce92bfa8857f5a375a9c8f"><span class=en-original lang=en><span class=secno>3.3 </span>APIs defined in other
2280     specifications</span><span class=ja-translation lang=ja><span class=secno>3.3 </span>他の仕様書で定義されている API</span></h3>
2281 wakaba 1.22
2282 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="3c9a0dcc3dbfc7283eea34202de4d321"><span class=en-original lang=en>The <dfn id=localstorage
2283 wakaba 1.22 title=dom-localStorage><code>localStorage</code></dfn>, <dfn
2284     id=opendatabase title=dom-opendatabase><code>openDatabase()</code></dfn>
2285     must act as defined for the APIs with the same names on the
2286     <code>Window</code> object in the HTML5 specification, with the exception
2287     that where the API would use the <span>origin</span> of the <span>active
2288     document</span> of the <span>browsing context</span> of the
2289     <code>Window</code> object on which the method was supposedly invoked, it
2290     must instead use the <span>origin</span> of the script that invoked the
2291     method. <a href="#refsHTML5">[HTML5]</a>
2292    
2293 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="6563db877bfe3b57772fed7dedbfc84b"><span class=en-original lang=en>The <dfn id=shownotification
2294 wakaba 1.22 title=dom-showNotification><code>showNotification()</code></dfn> methods
2295     must act as defined for the APIs with the same names on the
2296     <code>Window</code> object in the HTML5 specification. <a
2297     href="#refsHTML5">[HTML5]</a>
2298    
2299 wakaba 1.42 </span><h3 id=interface class="has-ja-translation" data-ja-hash="78e75b89c304218ef77a66cd9efdf398"><span class=en-original lang=en><span class=secno>3.4 </span>Interface objects and
2300     constructors</span><span class=ja-translation lang=ja><span class=secno>3.4 </span>界面オブジェクトと構築器</span></h3>
2301 wakaba 1.22
2302 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="2135421a70c368c728d0af40f99cee55"><span class=en-original lang=en>There must be no interface objects and constructors available in the
2303 wakaba 1.22 global scope of scripts whose <span>script execution context</span> is a
2304     <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object
2305     except for the following:
2306    
2307 wakaba 1.36 </span><ul>
2308 wakaba 1.22 <li>
2309 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="ee396bbb3d32ae2d31fc0a108ea3389c"><span class=en-original lang=en><code>XMLHttpRequest</code> and all interface objects and constructors
2310 wakaba 1.31 defined by the XMLHttpRequest specifications, except that the
2311     <span>document response entity body</span> must always be null. <a
2312     href="#refsXHR">[XHR]</a>
2313    
2314 wakaba 1.36 </span><li>
2315     <p class="has-ja-translation" data-ja-hash="3a205f7812c3029dcecfcbbd61199f90"><span class=en-original lang=en>The <code>WebSocket</code> interface object and constructor.
2316 wakaba 1.23
2317 wakaba 1.32 </span><span class=ja-translation lang=ja><code>WebSocket</code> 界面オブジェクトと構築器</span><li>
2318 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="c537145c77e1103c3a76557f40172a5a"><span class=en-original lang=en>The <code>MessageChannel</code> interface object and constructor.
2319 wakaba 1.32
2320 wakaba 1.42 </span><span class=ja-translation lang=ja><code>MessageChannel</code> 界面オブジェクトと構築器</span><li>
2321     <p class="no-ja-translation" data-ja-hash="0b577152dfe727cea2b187ff18e26a57"><span class=en-original lang=en>The <code title=dom-Worker><a href="#worker2">Worker()</a></code> and
2322     <code title=dom-SharedWorker><a href="#sharedworker0">SharedWorker(<var
2323     title="">url</var>)</a></code> constructors.
2324     </span></ul>
2325    
2326     <h3 id=worker0 class="has-ja-translation" data-ja-hash="ae4aa0f882fcbd2ee8252e59113ec205"><span class=en-original lang=en><span class=secno>3.5 </span>Worker locations</span><span class=ja-translation lang=ja><span class=secno>3.5 </span>労働者の所在</span></h3>
2327 wakaba 1.23
2328     <pre
2329 wakaba 1.36 class="idl no-ja-translation" data-ja-hash="cf592219c4e6cd8a917cbb3071aebfd5"><span class=en-original lang=en>[NoInterfaceObject] interface <dfn id=workerlocation>WorkerLocation</dfn> {
2330 wakaba 1.23 readonly attribute DOMString <a href="#href" title=dom-WorkerLocation-href>href</a>;
2331     readonly attribute DOMString <a href="#protocol" title=dom-WorkerLocation-protocol>protocol</a>;
2332     readonly attribute DOMString <a href="#host" title=dom-WorkerLocation-host>host</a>;
2333     readonly attribute DOMString <a href="#hostname" title=dom-WorkerLocation-hostname>hostname</a>;
2334 wakaba 1.29 readonly attribute DOMString <a href="#port0" title=dom-WorkerLocation-port>port</a>;
2335 wakaba 1.23 readonly attribute DOMString <a href="#pathname" title=dom-WorkerLocation-pathname>pathname</a>;
2336     readonly attribute DOMString <a href="#search" title=dom-WorkerLocation-search>search</a>;
2337     readonly attribute DOMString <a href="#hash" title=dom-WorkerLocation-hash>hash</a>;
2338 wakaba 1.36 };</span></pre>
2339 wakaba 1.23
2340 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="36debbc2eb6f1156c1bae8ade6331936"><span class=en-original lang=en>A <code><a href="#workerlocation">WorkerLocation</a></code> object
2341 wakaba 1.23 represents an <span>absolute URL</span> set at its creation.
2342    
2343 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="2d034b308d5fd16e5cf88da132b7ecb7"><span class=en-original lang=en>The <dfn id=href title=dom-WorkerLocation-href><code>href</code></dfn>
2344 wakaba 1.23 attribute must return the <span>absolute URL</span> that the object
2345     represents.
2346    
2347 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="f2d3c1ea8523c84f8de83e432d4ecb8e"><span class=en-original lang=en>The <code><a href="#workerlocation">WorkerLocation</a></code> interface
2348 wakaba 1.23 also has the complement of <span>URL decomposition attributes</span>, <dfn
2349     id=protocol title=dom-WorkerLocation-protocol><code>protocol</code></dfn>,
2350     <dfn id=host title=dom-WorkerLocation-host><code>host</code></dfn>, <dfn
2351 wakaba 1.29 id=port0 title=dom-WorkerLocation-port><code>port</code></dfn>, <dfn
2352 wakaba 1.23 id=hostname title=dom-WorkerLocation-hostname><code>hostname</code></dfn>,
2353     <dfn id=pathname
2354     title=dom-WorkerLocation-pathname><code>pathname</code></dfn>, <dfn
2355     id=search title=dom-WorkerLocation-search><code>search</code></dfn>, and
2356     <dfn id=hash title=dom-WorkerLocation-hash><code>hash</code></dfn>. These
2357     must follow the rules given for URL decomposition attributes, with the
2358     <span title=concept-uda-input>input</span> being the <span>absolute
2359     URL</span> that the object represents (same as the <code
2360     title=dom-WorkerLocation-href><a href="#href">href</a></code> attribute),
2361     and the <span title=concept-uda-setter>common setter action</span> being a
2362     no-op, since the attributes are defined to be readonly. <a
2363     href="#refsHTML5">[HTML5]</a>
2364 wakaba 1.22
2365 wakaba 1.37 </span><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>
2366 wakaba 1.32
2367 wakaba 1.39 <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
2368 wakaba 1.32 draft.<!--XXX-->
2369 wakaba 1.1
2370 wakaba 1.39 </span><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>
2371 wakaba 1.1 <!-- ACKS -->
2372    
2373 wakaba 1.42 <p class="has-ja-translation" data-ja-hash="a17a0feb6f58a31040d51121e80bc233" data-ja-real-hash="fe2b84b2e6d45d1e2eefd38ed17d8ac4"><span class=en-original lang=en>Thanks to Aaron Boodman, Dmitry Titov, Jonas Sicking, Justin James,
2374     Kevin Hakanson, Maciej Stachowiak, Michael Nordman, Mike Smith, and Philip
2375     Taylor for their useful and substantial comments.
2376 wakaba 1.32
2377 wakaba 1.42 </span><span class=ja-translation lang=ja>Aaron Boodman, Dmitry Titov, Jonas Sicking, Justin James, Kevin Hakanson, Maciej Stachowiak, Michael Nordman, Mike Smith, Philip Taylor の有用かつ重要なコメントに感謝します。</span><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 technology and
2378 wakaba 1.32 whose experience has been a huge influence on this specification.
2379     </span><span class=ja-translation lang=ja>Gears チームの方々にも非常に感謝します。
2380 wakaba 1.14 Gears チームの方々はこの技術を開拓し、その経験はこの仕様書にも多大な影響を与えています。
2381     </span>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24