/[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.51 - (hide annotations) (download)
Sun Jan 18 04:17:56 2009 UTC (17 years, 6 months ago) by wakaba
Branch: MAIN
Changes since 1.50: +2 -2 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.51 <h2 class="no-num no-toc has-ja-translation" data-ja-hash="9ea0914ebe364045b80e1ff1a8a2ec1e" data-ja-real-hash="f9ac838f2da2411141e832aaef934f67" id=draft><span class=en-original lang=en>Draft Recommendation &mdash; 14 January
24 wakaba 1.50 2009</span><span class=ja-translation lang=ja>勧告案<ins class=ja-note>の非公式和訳</ins> &mdash;
25 wakaba 1.51 <ins class=ja-note>(原文出版日)</ins> 2009年1月14日</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.44 </span><p class="no-ja-translation" data-ja-hash="bb77e82ccfbb3bd01ee25d2bf7243a07"><span class=en-original lang=en>This specification is also being produced by the <a
137     href="http://www.w3.org/2008/webapps/">W3C Web Apps WG</a>. The two
138     specifications are identical from the table of contents onwards.
139 wakaba 1.31
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.50 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="ab1b3562495830cab4f7e657b0f8c3de"><span class=en-original lang=en><a href="#introduction"><span class=secno>1 </span>Introduction</a>
146 wakaba 1.36 </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.50 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="1e8592ba7cd5e7e8258733b6ac72589e"><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.46 </span><li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="22ee8106fe8009d8a712074798cd2f31"><span class=en-original lang=en><a href="#the-event"><span class=secno>2.3 </span>The event loop</a>
201    
202 wakaba 1.9
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.48 </span><ul class=toc>
209     <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="986de6477b945859c87547990aad9a6c"><span class=en-original lang=en><a href="#runtime"><span class=secno>2.5.1 </span>Runtime script
210     errors</a>
211     </span></ul>
212 wakaba 1.13
213 wakaba 1.48 <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
214 wakaba 1.13 workers</a>
215 wakaba 1.36 </span><ul class=toc>
216     <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
217 wakaba 1.29 <code>AbstractWorker</code> abstract interface</a>
218    
219 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
220 wakaba 1.29 workers and the <code>Worker</code> interface</a>
221    
222 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
223 wakaba 1.29 and the <code>SharedWorker</code> interface</a>
224 wakaba 1.36 </span></ul>
225 wakaba 1.9 </ul>
226    
227 wakaba 1.50 <li><p class="no-ja-translation ja-translation-inserted" data-ja-hash="d86645fe6c38077b82c758dab4b2d506"><span class=en-original lang=en><a href="#apis-available"><span class=secno>3 </span>APIs available to
228     workers</a>
229 wakaba 1.36 </span><ul class=toc>
230     <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
231 wakaba 1.22 and libraries</a>
232    
233 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
234     <code>Navigator</code> object</a>
235    
236     </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
237 wakaba 1.22 other specifications</a>
238    
239 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
240 wakaba 1.22 and constructors</a>
241 wakaba 1.23
242 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>
243 wakaba 1.23
244 wakaba 1.36 </span></ul>
245 wakaba 1.1
246 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>
247 wakaba 1.1
248 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>
249     </span></ul>
250 wakaba 1.1 <!--end-toc-->
251    
252     <hr>
253    
254 wakaba 1.50 <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>
255 wakaba 1.32
256 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>
257    
258     <p class="has-ja-translation" data-ja-hash="585b83d0801ae75a14554d8d2c737fb2"><span class=en-original lang=en><em>This section is non-normative.</em>
259    
260     </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
261     independently of any user interface scripts.
262    
263     </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
264     that respond to clicks or other user interactions, and allows long tasks
265     to be executed without yielding to keep the page responsive.
266    
267     </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
268     heavy-weight, and are not intended to be used in large numbers. For
269     example, it would be inappropriate to launch one worker for each pixel of
270     a four megapixel image. The examples below show some appropriate uses of
271     workers.
272    
273     </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
274     performance cost, and a high per-instance memory cost.
275    
276     </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>
277 wakaba 1.32
278 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>
279 wakaba 1.32
280 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
281 wakaba 1.32 subsections show various examples of this use.
282    
283 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
284     number-crunching worker</span><span class=ja-translation lang=ja><span class=secno>1.2.1 </span>数値処理背景労働者</span></h4>
285 wakaba 1.32
286 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>
287 wakaba 1.1
288 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
289 wakaba 1.32 expensive task without interrupting the user interface.
290 wakaba 1.1
291 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)
292 wakaba 1.32 compute prime numbers, and progressively displays the most recently found
293     prime number.
294 wakaba 1.23
295 wakaba 1.32 </span><span class=ja-translation lang=ja>この例では、主たる文書が労働者を作って素数を (素朴な方法で) 計算させ、
296 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:
297 wakaba 1.32
298 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>
299 wakaba 1.23 &lt;html>
300     &lt;head>
301     &lt;title>Worker example: One-core computation&lt;/title>
302     &lt;/head>
303     &lt;body>
304     &lt;p>The highest prime number discovered so far is: &lt;output id="result">&lt;/output>&lt;/p>
305     &lt;script>
306 wakaba 1.29 var worker = new Worker('worker.js');
307     worker.onmessage = function (event) {
308 wakaba 1.42 document.getElementById('result').textContent = event.data;
309 wakaba 1.23 };
310     &lt;/script>
311     &lt;/body>
312 wakaba 1.36 &lt;/html></span></pre>
313 wakaba 1.23
314 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>
315 wakaba 1.30 constructor call creates a worker and returns a <code><a
316     href="#worker1">Worker</a></code> object representing that worker, which
317     is used to communicate with the worker. That object's <code
318     title=handler-Worker-onmessage><a href="#onmessage0">onmessage</a></code>
319     event handler attribute allows the code to receive messages from the
320     worker.
321 wakaba 1.23
322 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:
323 wakaba 1.32
324 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;
325 wakaba 1.23 search: while (true) {
326     n += 1;
327     for (var i = 2; i &lt;= Math.sqrt(n); i += 1)
328     if (n % i == 0)
329     continue search;
330     // found a prime!
331 wakaba 1.29 postMessage(n);
332 wakaba 1.36 }</span></pre>
333 wakaba 1.23
334 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
335 wakaba 1.23 number. To send a message back to the page, the <code
336 wakaba 1.30 title=dom-DedicatedWorkerGlobalScope-postMessage><a
337     href="#postmessage">postMessage()</a></code> method is used to post a
338     message when a prime is found.
339 wakaba 1.23
340 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
341 wakaba 1.32 example online</a>.
342    
343 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
344     client-side database</span><span class=ja-translation lang=ja><span class=secno>1.2.2 </span>クライアント側データベースの更新のための労働者</span></h4>
345 wakaba 1.23
346 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>
347 wakaba 1.32
348 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
349 wakaba 1.23 listen for notifications from the server, and, when appropriate, either
350     add or remove data from the client-side database.
351    
352 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
353 wakaba 1.23 main page can start the worker by just doing:
354    
355 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者と主たる頁の間に通信は発生しませんので、
356     主たる頁は単に次のようにするだけで労働者を開始できます。</span><pre class="no-ja-translation" data-ja-hash="1fa3b8ca6e1be5ba6915c7164f359cf2"><span class=en-original lang=en>&lt;script>
357 wakaba 1.30 new Worker('worker.js');
358 wakaba 1.36 &lt;/script></span></pre>
359 wakaba 1.23
360 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:
361 wakaba 1.32
362 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');
363 wakaba 1.25 var database = openDatabase('demobase', '1.0', 'Demo Database', 10240);
364 wakaba 1.23 server.onmessage = function (event) {
365     // data is in the format "command key value"
366 wakaba 1.42 var data = event.data.split(' ');
367 wakaba 1.23 switch (data[0]) {
368     case '+':
369     database.transaction(function(tx) {
370     tx.executeSql('INSERT INTO pairs (key, value) VALUES (?, ?)', data[1], data[2]);
371     });
372     case '-':
373     database.transaction(function(tx) {
374     tx.executeSql('DELETE FROM pairs WHERE key=? AND value=?', data[1], data[2]);
375     });
376     }
377 wakaba 1.36 };</span></pre>
378 wakaba 1.23
379 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
380 wakaba 1.23 and opens the local database (which, we presume, has been created
381 wakaba 1.42 earlier). The worker then just listens for messages from the server and
382 wakaba 1.23 acts on them as appropriate, forever (or until the main page is closed).
383    
384 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="d47c2ada69bdfebeb58219610105a1d7"><span class=en-original lang=en><a
385 wakaba 1.23 href="http://www.whatwg.org/demos/workers/database-updater/page.html">View
386     this example online</a>. (This example will not actually function, since
387     the server does not actually exist and the database is not created by this
388     sample code.)
389    
390 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>
391 wakaba 1.32
392 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>
393 wakaba 1.23
394 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
395 wakaba 1.23 stock updates for at regular intervals, and one for fetching performing
396     search queries that the user requests.
397    
398 wakaba 1.36 </span><span class=ja-translation lang=ja>この例では、主たる文書は2つの労働者を使います。
399     1つは一定間隔で株価の更新を取得するためのもので、もう1つは利用者の要求した検索の照会を行う取得のためのものです。</span><p class="has-ja-translation" data-ja-hash="97bcf42c4070cbcef605cfa277d832fb"><span class=en-original lang=en>The main page is as follows:
400 wakaba 1.32
401 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>
402 wakaba 1.23 &lt;html>
403     &lt;head>
404     &lt;title>Worker example: Stock ticker&lt;/title>
405     &lt;script>
406     // TICKER
407     var symbol = 'GOOG'; // default symbol to watch
408 wakaba 1.29 var ticker = new Worker('ticker.js');
409 wakaba 1.23
410     // SEARCHER
411 wakaba 1.29 var searcher = new Worker('searcher.js');
412 wakaba 1.23 function search(query) {
413 wakaba 1.29 searcher.postMessage(query);
414 wakaba 1.23 }
415    
416     // SYMBOL SELECTION UI
417     function select(newSymbol) {
418     symbol = newSymbol;
419 wakaba 1.29 ticker.postMessage(symbol);
420 wakaba 1.23 }
421     &lt;/script>
422     &lt;/head>
423     &lt;body>
424     &lt;p>&lt;output id="symbol">&lt;/output> &lt;output id="value">&lt;/output>&lt;/p>
425     &lt;script>
426 wakaba 1.29 ticker.onmessage = function (event) {
427 wakaba 1.42 var data = event.data.split(' ');
428 wakaba 1.23 document.getElementById('symbol').textContent = data[0];
429     document.getElementById('value').textContent = data[1];
430     };
431 wakaba 1.29 ticker.postMessage(symbol);
432 wakaba 1.23 &lt;/script>
433     &lt;p>&lt;label>Search: &lt;input type="text" oninput="search(this.value)">&lt;/label>&lt;/p>
434     &lt;ul id="results">&lt;/ul>
435     &lt;script>
436 wakaba 1.29 searcher.onmessage = function (event) {
437 wakaba 1.42 var data = event.data.split(' ');
438 wakaba 1.23 var results = document.getElementById('results');
439     while (results.hasChildNodes()) // clear previous results
440     results.removeChild(results.firstChild);
441     for (var i = 0; i &lt; data.length; i += 1) {
442     // add a list item with a button for each result
443     var li = document.createElement('li');
444     var button = document.createElement('button');
445     button.value = data[i];
446     button.type = 'button';
447     button.onclick = function () { select(this.value); };
448     button.textContent = data[i];
449     li.appendChild(button);
450     results.appendChild(li);
451     }
452     };
453     &lt;/script>
454     &lt;p>(The data in this example is not real. Try searching for "Google" or "Apple".)&lt;/p>
455     &lt;/body>
456 wakaba 1.36 &lt;/html></span></pre>
457 wakaba 1.23
458 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
459 wakaba 1.23 calls. This library is as follows:
460    
461 wakaba 1.36 </span><span class=ja-translation lang=ja>両労働者は実際のネットワークの呼び出しを行う共通のライブラリーを使います。
462     このライブラリーは次の通りです。</span><pre class="no-ja-translation" data-ja-hash="764d750a19834bf904d276466724339c"><span class=en-original lang=en>function get(url) {
463 wakaba 1.29 try {
464     var xhr = new XMLHttpRequest();
465     xhr.open('GET', url, false);
466     xhr.send();
467     return xhr.responseText;
468     } catch (e) {
469     return ''; // turn all errors into empty results
470     }
471 wakaba 1.36 }</span></pre>
472 wakaba 1.23
473 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:
474 wakaba 1.23
475 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');
476 wakaba 1.23 var timer;
477     var symbol;
478     function update() {
479 wakaba 1.29 postMessage(symbol + ' ' + get('stock.cgi?' + symbol));
480 wakaba 1.23 timer = setTimeout(update, 10000);
481     }
482 wakaba 1.29 onmessage = function (event) {
483 wakaba 1.23 if (timer)
484     clearTimeout(timer);
485 wakaba 1.42 symbol = event.data;
486 wakaba 1.23 update();
487 wakaba 1.36 };</span></pre>
488 wakaba 1.23
489 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:
490 wakaba 1.23
491 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');
492 wakaba 1.29 onmessage = function (event) {
493 wakaba 1.42 postMessage(get('search.cgi?' + event.data));
494 wakaba 1.36 };</span></pre>
495 wakaba 1.23
496 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
497 wakaba 1.32 example online</a>.
498 wakaba 1.23
499 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>
500 wakaba 1.32
501 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>
502 wakaba 1.32
503 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
504 wakaba 1.23 viewing the same map. All the windows share the same map information, with
505     a single worker coordinating all the viewers. Each viewer can move around
506 wakaba 1.42 independently, but if they set any data on the map, all the viewers are
507 wakaba 1.23 updated.
508    
509 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
510 wakaba 1.23 viewers:
511    
512 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>
513 wakaba 1.23 &lt;html>
514     &lt;head>
515     &lt;title>Workers example: Multiviewer&lt;/title>
516     &lt;script>
517     function openViewer() {
518     window.open('viewer.html');
519     }
520     &lt;/script>
521     &lt;/head>
522     &lt;body>
523     &lt;p>&lt;button type=button onclick="openViewer()">Open a new
524     viewer&lt;/button>&lt;/p>
525     &lt;p>Each viewer opens in a new window. You can have as many viewers
526     as you like, they all view the same data.&lt;/p>
527     &lt;/body>
528 wakaba 1.36 &lt;/html></span></pre>
529 wakaba 1.23
530 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="cee02afe1e87e7182f5219ccf54757ca"><span class=en-original lang=en>The viewer is more involved:
531 wakaba 1.23
532 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>
533 wakaba 1.23 &lt;html>
534     &lt;head>
535     &lt;title>Workers example: Multiviewer viewer&lt;/title>
536     &lt;script>
537 wakaba 1.29 var worker = new SharedWorker('worker.js', 'core');
538 wakaba 1.23
539     // CONFIGURATION
540     function configure(event) {
541 wakaba 1.42 if (event.data.substr(0, 4) != 'cfg ') return;
542     var name = event.data.substr(4).split(' ', 1);
543 wakaba 1.23 // update display to mention our name is name
544     document.getElementsByTagName('h1')[0].textContent += ' ' + name;
545     // no longer need this listener
546 wakaba 1.25 worker.port.removeEventListener('message', configure, false);
547 wakaba 1.23 }
548 wakaba 1.30 worker.port.addEventListener('message', configure, false);
549 wakaba 1.23
550     // MAP
551     function paintMap(event) {
552 wakaba 1.42 if (event.data.substr(0, 4) != 'map ') return;
553     var data = event.data.substr(4).split(',');
554 wakaba 1.23 // display tiles data[0] .. data[8]
555     var canvas = document.getElementById('map');
556     var context = canvas.getContext('2d');
557     for (var y = 0; y &lt; 3; y += 1) {
558     for (var x = 0; x &lt; 3; x += 1) {
559     var tile = data[y * 3 + x];
560     if (tile == '0')
561     context.fillStyle = 'green';
562     else
563     context.fillStyle = 'maroon';
564     fillRect(x * 50, y * 50, 50, 50);
565     }
566     }
567     }
568 wakaba 1.30 worker.port.addEventListener('message', paintMap, false);
569 wakaba 1.23
570     // PUBLIC CHAT
571     function updatePublicChat(event) {
572 wakaba 1.42 if (event.data.substr(0, 4) != 'txt ') return;
573     var name = event.data.substr(4).split(' ', 1);
574     var message = event.data.substr(4 + length(name) + 1);
575 wakaba 1.23 // display "&lt;name> message" in public chat
576     var dialog = document.getElementById('public');
577     var dt = document.createElement('dt');
578     dt.textContent = name;
579     dialog.appendChild(dt);
580     var dd = document.createElement('dd');
581     dd.textContent = message;
582     dialog.appendChild(dd);
583     }
584 wakaba 1.30 worker.port.addEventListener('message', updatePublicChat, false);
585 wakaba 1.23
586     // PRIVATE CHAT
587     function startPrivateChat(event) {
588 wakaba 1.42 if (event.data.substr(0, 4) != 'msg ') return;
589     var name = event.data.substr(4).split(' ', 1);
590 wakaba 1.23 var port = event.port;
591     // display a private chat UI
592     var ul = document.getElementById('private');
593     var li = document.createElement('li');
594     var h3 = document.createElement('h3');
595     h3.textContent = 'Private chat with ' + name;
596     li.appendChild(h3);
597     var dialog = document.createElement('dialog');
598     var addMessage = function(name, message) {
599     var dt = document.createElement('dt');
600     dt.textContent = name;
601     dialog.appendChild(dt);
602     var dd = document.createElement('dd');
603     dd.textContent = message;
604     dialog.appendChild(dd);
605     };
606     port.onmessage = function (event) {
607 wakaba 1.42 addMessage(name, event.data);
608 wakaba 1.23 };
609     li.appendChild(dialog);
610     var form = document.createElement('form');
611     var p = document.createElement('p');
612     var input = document.createElement('input');
613     input.size = 50;
614     p.appendChild(input);
615     p.appendChild(document.createTextNode(' '));
616     var button = document.createElement('button');
617     button.textContent = 'Post';
618     p.appendChild(button);
619     form.onsubmit = function () {
620     port.postMessage(input.value);
621     addMessage('me', input.value);
622     input.value = '';
623     return false;
624     };
625     form.appendChild(p);
626     li.appendChild(form);
627     }
628 wakaba 1.30 worker.port.addEventListener('message', startPrivateChat, false);
629 wakaba 1.23 &lt;/script>
630     &lt;/head>
631 wakaba 1.29 &lt;body>
632 wakaba 1.23 &lt;h1>Viewer&lt;/h1>
633     &lt;h2>Map&lt;/h2>
634     &lt;p>&lt;canvas id="map" height=150 width=150>&lt;/canvas>&lt;/p>
635     &lt;p>
636 wakaba 1.30 &lt;button type=button onclick="worker.port.postMessage('mov left')">Left&lt;/button>
637     &lt;button type=button onclick="worker.port.postMessage('mov up')">Up&lt;/button>
638     &lt;button type=button onclick="worker.port.postMessage('mov down')">Down&lt;/button>
639     &lt;button type=button onclick="worker.port.postMessage('mov right')">Right&lt;/button>
640     &lt;button type=button onclick="worker.port.postMessage('set 0')">Set 0&lt;/button>
641     &lt;button type=button onclick="worker.port.postMessage('set 1')">Set 1&lt;/button>
642 wakaba 1.23 &lt;/p>
643     &lt;h2>Public Chat&lt;/h2>
644     &lt;dialog id="public">&lt;/dialog>
645 wakaba 1.30 &lt;form onsubmit="worker.port.postMessage('txt ' + message.value); message.value = ''; return false;">
646 wakaba 1.23 &lt;p>
647     &lt;input type="text" name="message" size="50">
648     &lt;button>Post&lt;/button>
649     &lt;/p>
650     &lt;/form>
651     &lt;h2>Private Chat&lt;/h2>
652     &lt;ul id="private">&lt;/ul>
653     &lt;/body>
654 wakaba 1.25 &lt;/html>
655 wakaba 1.36 </span></pre>
656 wakaba 1.23
657 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
658 wakaba 1.23 written.
659    
660 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
661 wakaba 1.23 processing function, the code here attaches multiple event listeners, each
662     one performing a quick check to see if it is relevant for the message. In
663     this example it doesn't make much difference, but if multiple authors
664     wanted to collaborate using a single port to communicate with a worker, it
665     would allow for independent code instead of changes having to all be made
666     to a single event handling function.
667    
668 wakaba 1.36 </span><span class=ja-translation lang=ja><strong>複数の聴取器</strong>。この符号では、メッセージ処理関数を1つ用意する代わりに、
669     複数の事象聴取器を付与し、それぞれが、それがメッセージに関連するかどうかを見るためにさらりと検査を行っています。
670     この例では大きな違いにはなりませんが、複数の著者が労働者と通信するために1つのポートを使って協調したい場合には、
671     独立した符号にできるので変更がある度に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
672 wakaba 1.23 specific listeners when you are done with them, as is done with the <code
673     title="">configure()</code> method in this example.
674    
675 wakaba 1.36 </span><p class="has-ja-translation" data-ja-hash="4eb1fa2095f65662225da4c52db274f1"><span class=en-original lang=en>Finally, the worker:
676 wakaba 1.23
677 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>
678 wakaba 1.23 var nextName = 0;
679     function getNextName() {
680     // this could use more friendly names
681     // but for now just return a number
682     return nextName++;
683     }
684    
685     var map = [
686     [0, 0, 0, 0, 0, 0, 0],
687     [1, 1, 0, 1, 0, 1, 1],
688     [0, 1, 0, 1, 0, 0, 0],
689     [0, 1, 0, 1, 0, 1, 1],
690     [0, 0, 0, 1, 0, 0, 0],
691     [1, 0, 0, 1, 1, 1, 1],
692     [1, 1, 0, 1, 1, 0, 1],
693     ];
694    
695     function wrapX(x) {
696     if (x &lt; 0) return wrapX(x + map[0].length);
697     if (x >= map[0].length) return wrapX(x - map[0].length);
698     return x;
699     }
700    
701     function wrapY(y) {
702     if (y &lt; 0) return wrapY(y + map.length);
703     if (y >= map[0].length) return wrapY(y - map.length);
704     return y;
705     }
706    
707 wakaba 1.29 function sendMapData(callback) {
708 wakaba 1.23 var data = '';
709     for (var y = viewer.y-1; y &lt;= viewer.y+1; y += 1) {
710     for (var x = viewer.x-1; x &lt;= viewer.x+1; x += 1) {
711     if (data != '')
712     data += ',';
713     data += map[y][x];
714     }
715     }
716 wakaba 1.29 callback('map ' + data);
717 wakaba 1.23 }
718    
719     var viewers = {};
720     onconnect = function (event) {
721     event.port._name = getNextName();
722     event.port._data = { port: event.port, x: 0, y: 0, };
723     viewers[event.port._name] = event.port._data;
724     event.port.postMessage('cfg ' + name);
725     event.port.onmessage = getMessage;
726 wakaba 1.29 sendMapData(event.port.postMessage);
727 wakaba 1.23 };
728    
729     function getMessage(event) {
730 wakaba 1.42 switch (event.data.substr(0, 4)) {
731 wakaba 1.23 case 'mov ':
732 wakaba 1.42 var direction = event.data.substr(4);
733 wakaba 1.23 var dx = 0;
734     var dy = 0;
735     switch (direction) {
736     case 'up': dy = -1; break;
737     case 'down': dy = 1; break;
738     case 'left': dx = -1; break;
739     case 'right': dx = 1; break;
740     }
741     event.target._data.x = wrapX(event.target._data.x + dx);
742     event.target._data.y = wrapY(event.target._data.y + dy);
743 wakaba 1.29 sendMapData(event.target.postMessage);
744 wakaba 1.23 break;
745     case 'set ':
746 wakaba 1.42 var value = event.data.substr(4);
747 wakaba 1.23 map[event.target._data.y][event.target._data.x] = value;
748     for (var viewer in viewers)
749 wakaba 1.29 sendMapData(viewers[viewer].port.postMessage);
750 wakaba 1.23 break;
751     case 'txt ':
752     var name = event.target._name;
753 wakaba 1.42 var message = event.data.substr(4);
754 wakaba 1.23 for (var viewer in viewers)
755     viewers[viewer].port.postMessage('txt ' + name + ' ' + message);
756     break;
757     case 'msg ':
758     var party1 = event._data;
759 wakaba 1.42 var party2 = viewers[event.data.substr(4).split(' ', 1)];
760 wakaba 1.23 if (party2) {
761     var channel = new MessageChannel();
762     party1.port.postMessage('msg ' + party2.name, channel.port1);
763     party2.port.postMessage('msg ' + party1.name, channel.port2);
764     }
765     break;
766     }
767 wakaba 1.36 }</span></pre>
768 wakaba 1.23
769 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
770 wakaba 1.30 title=handler-SharedWorkerGlobalScope-onconnect><a
771     href="#onconnect">onconnect</a></code> event listener to listen for
772     multiple connections.
773 wakaba 1.23
774 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"
775 wakaba 1.23 message from one viewer naming another viewer, it sets up a direct
776     connection between the two, so that the two viewers can communicate
777     directly without the worker having to proxy all the messages.
778    
779 wakaba 1.36 </span><span class=ja-translation lang=ja><strong>直接通信路</strong>。労働者がある閲覧器から他の閲覧器を名指した「msg」メッセージを受信した時は、
780     両者間の直接の接続を設定し、労働者がすべてのメッセージを仲介せずとも両閲覧器が直接通信できるようにします。</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
781 wakaba 1.32 this example online</a>.
782    
783 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>
784 wakaba 1.23
785 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>
786 wakaba 1.32
787 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
788 wakaba 1.23 performance is to split computationally expensive tasks amongst multiple
789     workers. In this example, a computationally expensive task that is to be
790     performed for every number from 1 to 10,000,000 is farmed out to ten
791     subworkers.
792    
793 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:
794 wakaba 1.23
795 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>
796 wakaba 1.23 &lt;html>
797     &lt;head>
798     &lt;title>Worker example: One-core computation&lt;/title>
799     &lt;/head>
800     &lt;body>
801     &lt;p>The highest prime number discovered so far is: &lt;output id="result">&lt;/output>&lt;/p>
802     &lt;script>
803 wakaba 1.29 var worker = new Worker('worker.js');
804     worker.onmessage = function (event) {
805 wakaba 1.42 document.getElementById('result').textContent = event.data;
806 wakaba 1.23 };
807     &lt;/script>
808     &lt;/body>
809 wakaba 1.36 &lt;/html></span></pre>
810 wakaba 1.23
811 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="12a62a74d5156b6d85136f5fc41a4ee1"><span class=en-original lang=en>The worker itself is as follows:
812 wakaba 1.32
813 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
814 wakaba 1.23 var num_workers = 10;
815     var items_per_worker = 1000000;
816    
817     // start the workers
818     var result = 0;
819     var pending_workers = num_workers;
820     for (var i = 0; i &lt; num_workers; i += 1) {
821 wakaba 1.29 var worker = new Worker('core.js');
822     worker.postMessage(i * items_per_worker);
823     worker.postMessage((i+1) * items_per_worker);
824     worker.onmessage = storeResult;
825 wakaba 1.23 }
826    
827     // handle the results
828     function storeResult(event) {
829 wakaba 1.42 result += 1*event.data;
830 wakaba 1.23 pending_workers -= 1;
831     if (pending_workers &lt;= 0)
832 wakaba 1.29 postMessage(result); // finished!
833 wakaba 1.36 }</span></pre>
834 wakaba 1.23
835 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
836 wakaba 1.23 waits for all the subworkers to respond.
837    
838 wakaba 1.36 </span><span class=ja-translation lang=ja>これは部分労働者を開始するループと、
839     すべての部分労働者が応答するのを待つ取扱器から成っています。</span><p class="has-ja-translation" data-ja-hash="53f3483f6fffa25f7c6963e58d683f43"><span class=en-original lang=en>The subworkers are implemented as follows:
840 wakaba 1.23
841 wakaba 1.44 </span><span class=ja-translation lang=ja>部分労働者は次のように実装します。</span><pre class="no-ja-translation" data-ja-hash="90fc569c1c634a87b725ebbe4cc1e2f4"><span class=en-original lang=en>var start;
842 wakaba 1.23 onmessage = getStart;
843     function getStart(event) {
844 wakaba 1.42 start = 1*event.data;
845 wakaba 1.23 onmessage = getEnd;
846     }
847    
848     var end;
849     function getEnd(event) {
850 wakaba 1.42 end = 1*event.data;
851 wakaba 1.23 onmessage = null;
852 wakaba 1.44 work();
853 wakaba 1.23 }
854    
855 wakaba 1.44 function work() {
856 wakaba 1.23 var result = 0;
857     for (var i = start; i &lt; end; i += 1) {
858     // perform some complex calculation here
859     result += 1;
860     }
861 wakaba 1.29 postMessage(result);
862     close();
863 wakaba 1.36 }</span></pre>
864 wakaba 1.23
865 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
866 wakaba 1.23 range of numbers thus specified, and then report the result back to the
867     parent.
868    
869 wakaba 1.36 </span><span class=ja-translation lang=ja>部分労働者は2つの事象で2つの数を受信し、指定された数の範囲の計算を行った後、
870     結果を親に報告します。
871     </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
872 wakaba 1.32 this example online</a>.
873    
874 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>
875 wakaba 1.28
876 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>
877 wakaba 1.32
878 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
879 wakaba 1.28 three tasks:
880    
881 wakaba 1.36 </span><dl>
882 wakaba 1.37 <dt class="has-ja-translation" data-ja-hash="6ea027035e660e254aba77f4bd9cb6e7"><span class=en-original lang=en>Generate a public/private key pair
883 wakaba 1.28
884 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
885 wakaba 1.28 and then the private key.
886    
887 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
888 wakaba 1.28 cyphertext
889    
890 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
891 wakaba 1.28 giving the public key, and the remainder giving the plaintext, each of
892     which is encrypted and then sent on that same channel as the cyphertext.
893     The user can close the port when it is done encrypting content.
894    
895 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
896 wakaba 1.28 plaintext
897    
898 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
899 wakaba 1.28 giving the private key, and the remainder giving the cyphertext, each of
900     which is decrypted and then sent on that same channel as the plaintext.
901     The user can close the port when it is done decrypting content.
902 wakaba 1.36 </span></dl>
903 wakaba 1.28
904 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="0e39ac88e71e60206c341926e3785dcd"><span class=en-original lang=en>The library itself is as follows:
905 wakaba 1.28
906 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) {
907     if (e.data == "genkeys")
908 wakaba 1.28 genkeys(e.port);
909 wakaba 1.42 else if (e.data == "encrypt")
910 wakaba 1.28 encrypt(e.port);
911 wakaba 1.42 else if (e.data == "decrypt")
912 wakaba 1.28 decrypt(e.port);
913     }
914    
915     function genkeys(p) {
916     var keys = _generateKeyPair();
917     p.postMessage(keys[0]);
918     p.postMessage(keys[1]);
919     }
920    
921     function encrypt(p) {
922     var key, state = 0;
923     p.onmessage = function (e) {
924     if (state == 0) {
925 wakaba 1.42 key = e.data;
926 wakaba 1.28 state = 1;
927     } else {
928 wakaba 1.42 p.postMessage(_encrypt(key, e.data));
929 wakaba 1.28 }
930     };
931     }
932    
933     function decrypt(p) {
934     var key, state = 0;
935     p.onmessage = function (e) {
936     if (state == 0) {
937 wakaba 1.42 key = e.data;
938 wakaba 1.28 state = 1;
939     } else {
940 wakaba 1.42 p.postMessage(_decrypt(key, e.data));
941 wakaba 1.28 }
942     };
943     }
944    
945 wakaba 1.29 // support being used as a shared worker as well as a dedicated worker
946     if (this.onmessage) // dedicated worker
947     onmessage = handleMessage;
948     else // shared worker
949     onconnect = function (e) { e.port.onmessage = handleMessage; }
950 wakaba 1.28
951    
952     // the "crypto" functions:
953    
954     function _generateKeyPair() {
955     return [Math.random(), Math.random()];
956     }
957    
958     function _encrypt(k, s) {
959     return 'encrypted-' + k + ' ' + s;
960     }
961    
962     function _decrypt(k, s) {
963     return s.substr(s.indexOf(' ')+1);
964 wakaba 1.36 }</span></pre>
965 wakaba 1.28
966 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
967 wakaba 1.28 cryptography.
968    
969 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:
970 wakaba 1.28
971 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>
972 wakaba 1.28 &lt;html>
973     &lt;head>
974     &lt;title>Worker example: Crypto library&lt;/title>
975     &lt;script>
976 wakaba 1.29 var crytoLib = new Worker('libcrypto-v1.js'); // or could use 'libcrypto-v2.js'
977 wakaba 1.28 function getKeys() {
978     var state = 0;
979 wakaba 1.29 cryptoLib.startConversation("genkeys").onmessage = function (e) {
980 wakaba 1.28 if (state == 0)
981 wakaba 1.42 document.getElementById('public').value = e.data;
982 wakaba 1.28 else if (state == 1)
983 wakaba 1.42 document.getElementById('private').value = e.data;
984 wakaba 1.28 state += 1;
985     };
986     }
987     function enc() {
988 wakaba 1.29 var port = cryptoLib.startConversation("encrypt");
989     port.postMessage(document.getElementById('public').value);
990     port.postMessage(document.getElementById('input').value);
991     port.onmessage = function (e) {
992 wakaba 1.42 document.getElementById('input').value = e.data;
993 wakaba 1.29 port.close();
994 wakaba 1.28 };
995     }
996     function dec() {
997 wakaba 1.29 var port = cryptoLib.startConversation("decrypt");
998     port.postMessage(document.getElementById('private').value);
999     port.postMessage(document.getElementById('input').value);
1000     port.onmessage = function (e) {
1001 wakaba 1.42 document.getElementById('input').value = e.data;
1002 wakaba 1.29 port.close();
1003 wakaba 1.28 };
1004     }
1005     &lt;/script>
1006     &lt;style>
1007     textarea { display: block; }
1008     &lt;/style>
1009     &lt;/head>
1010     &lt;body onload="getKeys()">
1011     &lt;fieldset>
1012     &lt;legend>Keys&lt;/legend>
1013 wakaba 1.29 &lt;p>&lt;label>Public Key: &lt;textarea id="public">&lt;/textarea>&lt;/label>&lt;/p>
1014     &lt;p>&lt;label>Private Key: &lt;textarea id="private">&lt;/textarea>&lt;/label>&lt;/p>
1015 wakaba 1.28 &lt;/fieldset>
1016 wakaba 1.29 &lt;p>&lt;label>Input: &lt;textarea id="input">&lt;/textarea>&lt;/label>&lt;/p>
1017 wakaba 1.28 &lt;p>&lt;button onclick="enc()">Encrypt&lt;/button> &lt;button onclick="dec()">Decrypt&lt;/button>&lt;/p>
1018     &lt;/body>
1019 wakaba 1.36 &lt;/html></span></pre>
1020 wakaba 1.28
1021 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
1022 wakaba 1.28 work onto subworkers. This could be done as follows:
1023    
1024 wakaba 1.42 </span><pre class="no-ja-translation" data-ja-hash="12b84d4be6a7f7bdc55d6f3ea37a96b3"><span class=en-original lang=en>function handleMessage(e) {
1025     if (e.data == "genkeys")
1026 wakaba 1.28 genkeys(e.port);
1027 wakaba 1.42 else if (e.data == "encrypt")
1028 wakaba 1.28 encrypt(e.port);
1029 wakaba 1.42 else if (e.data == "decrypt")
1030 wakaba 1.28 decrypt(e.port);
1031     }
1032    
1033     function genkeys(p) {
1034 wakaba 1.29 var generator = new Worker('libcrypto-v2-generator.js');
1035 wakaba 1.28 generator.postMessage('', p);
1036     }
1037    
1038     function encrypt(p) {
1039     p.onmessage = function (e) {
1040 wakaba 1.42 var key = e.data;
1041 wakaba 1.29 var encryptor = new Worker('libcrypto-v2-encryptor.js');
1042 wakaba 1.28 encryptor.postMessage(key, p);
1043     };
1044     }
1045    
1046     function encrypt(p) {
1047     p.onmessage = function (e) {
1048 wakaba 1.42 var key = e.data;
1049 wakaba 1.29 var decryptor = new Worker('libcrypto-v2-decryptor.js');
1050 wakaba 1.28 decryptor.postMessage(key, p);
1051     };
1052     }
1053    
1054 wakaba 1.29 // support being used as a shared worker as well as a dedicated worker
1055     if (this.onmessage) // dedicated worker
1056     onmessage = handleMessage;
1057     else // shared worker
1058     onconnect = function (e) { e.port.onmessage = handleMessage; }
1059 wakaba 1.36 </span></pre>
1060 wakaba 1.28
1061 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.
1062 wakaba 1.28
1063 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:
1064 wakaba 1.28
1065 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) {
1066 wakaba 1.29 var k = _generateKeyPair();
1067     e.port.postMessage(k[0]);
1068     e.port.postMessage(k[1]);
1069 wakaba 1.28 close();
1070     }
1071 wakaba 1.29
1072     function _generateKeyPair() {
1073     return [Math.random(), Math.random()];
1074 wakaba 1.36 }</span></pre>
1075 wakaba 1.28
1076 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="1f07f24df05f20de47483db4dfde2017"><span class=en-original lang=en>For encrypting:
1077 wakaba 1.28
1078 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) {
1079     var key = e.data;
1080 wakaba 1.28 e.port.onmessage = function (e) {
1081 wakaba 1.42 var s = e.data;
1082 wakaba 1.29 postMessage(_encrypt(key, s));
1083 wakaba 1.28 }
1084 wakaba 1.29 e.port.onclose = function (e) {
1085 wakaba 1.28 close();
1086     }
1087 wakaba 1.29 }
1088    
1089     function _encrypt(k, s) {
1090     return 'encrypted-' + k + ' ' + s;
1091 wakaba 1.36 }</span></pre>
1092 wakaba 1.28
1093 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="abf884f40593747f458e7d7400b1eb21"><span class=en-original lang=en>For decrypting:
1094 wakaba 1.28
1095 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) {
1096     var key = e.data;
1097 wakaba 1.28 e.port.onmessage = function (e) {
1098 wakaba 1.42 var s = e.data;
1099 wakaba 1.29 postMessage(_decrypt(key, s));
1100 wakaba 1.28 }
1101 wakaba 1.29 e.port.onclose = function (e) {
1102 wakaba 1.28 close();
1103     }
1104 wakaba 1.29 }
1105    
1106     function _decrypt(k, s) {
1107     return s.substr(s.indexOf(' ')+1);
1108 wakaba 1.36 }</span></pre>
1109 wakaba 1.28
1110 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
1111 wakaba 1.28 happening &mdash; the API hasn't changed; the library can delegate to
1112     subworkers without changing its API, even though it is accepting data
1113     using message channels.
1114    
1115 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
1116 wakaba 1.32 example online</a>.
1117    
1118 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>
1119 wakaba 1.1
1120 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
1121 wakaba 1.32 non-normative, as are all sections explicitly marked non-normative.
1122     Everything else in this specification is normative.
1123    
1124     </span><span class=ja-translation lang=ja>この仕様書のすべての図、例示、注意書き、ならびに規定の一部ではないと明記したすべての節は、
1125 wakaba 1.1 規定の一部ではありません。
1126 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
1127 wakaba 1.31 NOT",-->
1128     "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in the
1129     normative parts of this document are to be interpreted as described in
1130     RFC2119. For readability, these words do not appear in all uppercase
1131 wakaba 1.46 letters in this specification. <a href="#refsRFC2119">[RFC2119]</a>
1132 wakaba 1.1
1133 wakaba 1.46 </span><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
1134 wakaba 1.32 "strip any leading space characters" or "return false and abort these
1135     steps") are to be interpreted with the meaning of the key word ("must",
1136     "should", "may", etc) used in introducing the algorithm.
1137    
1138     </span><span class=ja-translation lang=ja>算法の一部として<ins class=ja-note>動作の指示の形で (原文では</ins>命令形で<ins class=ja-note>) </ins>記述された要件
1139 wakaba 1.1 (例えば「先頭の間隔文字をすべて除去します」や「偽を返し、これらの段階を停止します」)
1140 wakaba 1.24 は、算法を紹介するに当たって使われたキーワード (<em class=rfc2119 title="MUST">しなければなりません</em>、
1141 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,
1142 wakaba 1.32 methods or objects. Such requirements are to be interpreted as
1143     requirements on user agents.
1144    
1145     </span><span class=ja-translation lang=ja>いくつかの適合性要件は属性やメソッドやオブジェクトの要件として説明されています。
1146 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
1147 wakaba 1.32 implemented in any manner, so long as the end result is equivalent. (In
1148     particular, the algorithms defined in this specification are intended to
1149     be easy to follow, and not intended to be performant.)
1150    
1151     </span><span class=ja-translation lang=ja>算法や特定の段階として説明されている適合性要件は、
1152 wakaba 1.1 最終的な結果が等価である限り、任意の方法で実装して<em class=rfc2119 title="MAY">構いません</em>。
1153     (特に、この仕様書で定義されている算法は追うのを簡単にしており、
1154 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.
1155 wakaba 1.32
1156 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
1157 wakaba 1.32 unconstrained inputs, e.g. to prevent denial of service attacks, to guard
1158     against running out of memory, or to work around platform-specific
1159     limitations.
1160    
1161     </span><span class=ja-translation lang=ja>利用者エージェントは、サービス拒否攻撃を防ぐため、
1162 wakaba 1.1 記憶容量を使い尽くすことを防ぐため、
1163     あるいは環境特有の制限に対応するためなどの目的で、
1164 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>
1165 wakaba 1.1
1166 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.
1167 wakaba 1.32
1168     </span><span class=ja-translation lang=ja>この仕様書は、他のいくつかの下位の仕様書に依存しています。</span><dl>
1169 wakaba 1.36 <dt class="no-ja-translation" data-ja-hash="6bff62b10d884fb77428cfe168cd783d"><span class=en-original lang=en>HTML5
1170 wakaba 1.1
1171 wakaba 1.36 </span><dd>
1172     <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.
1173     <a href="#refsHTML5">[HTML5]</a></span></p>
1174 wakaba 1.1
1175 wakaba 1.36 <dt class="no-ja-translation" data-ja-hash="760145493119c1b42cb6fe0bbde08987"><span class=en-original lang=en>ECMAScript
1176 wakaba 1.1
1177 wakaba 1.36 </span><dd>
1178     <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
1179     scripting language. <a href="#refsJS">[JS]</a></span></p>
1180 wakaba 1.1
1181 wakaba 1.36 <dt class="no-ja-translation" data-ja-hash="21838f6e93b1a2157b16dcb6281ff225"><span class=en-original lang=en>WebIDL
1182 wakaba 1.1
1183 wakaba 1.36 </span><dd>
1184     <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
1185     specification. <a href="#refsWebIDL">[WebIDL]</a></span></p>
1186 wakaba 1.1 </dl>
1187    
1188 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>
1189 wakaba 1.32
1190 wakaba 1.46 <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
1191 wakaba 1.32 title="">Foo</code> is actually an interface, is sometimes used instead of
1192     the more accurate "an object implementing the interface <code
1193     title="">Foo</code>".
1194    
1195     </span><span class=ja-translation lang=ja>「<code title="">Foo</code> オブジェクト」という構文 (<code title="">Foo</code>
1196 wakaba 1.10 は実際には界面) を時々使いますが、より正確な「界面 <code title="">Foo</code>
1197 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
1198 wakaba 1.31 in Web applications, and does not necessarily imply the existence of an
1199     actual <code>Document</code> object or of any other <code>Node</code>
1200     objects as defined in the DOM Core specifications. <a
1201     href="#refsDOM3CORE">[DOM3CORE]</a>
1202    
1203 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
1204 wakaba 1.32 retrieved (e.g. by author script), and is said to be <em>setting</em> when
1205     a new value is assigned to it.
1206    
1207     </span><span class=ja-translation lang=ja>DOM 属性は、その値が (例えば著者のスクリプトにより) 取り出される時<em>取得される</em>といい、
1208 wakaba 1.50 新しい値がその属性に割り当てられる時<em>設定される</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>
1209 wakaba 1.9
1210 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.
1211 wakaba 1.29 Dedicated workers, once created, and are linked to their creator; but
1212     message ports can be used to communicate from a dedicated worker to
1213 wakaba 1.42 multiple other browsing contexts or workers. Shared workers, on the other
1214 wakaba 1.29 hand, are named, and once created any script running in the same
1215     <span>origin</span> can obtain a reference to that worker and communicate
1216     with it.
1217    
1218 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>
1219 wakaba 1.29
1220 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.
1221 wakaba 1.29
1222 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
1223     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>
1224 wakaba 1.9
1225     <pre
1226 wakaba 1.50 class="idl no-ja-translation" data-ja-hash="330e32b358fd04f4f8631c7d12551185"><span class=en-original lang=en>interface <dfn id=workerglobalscope>WorkerGlobalScope</dfn> {
1227 wakaba 1.22 readonly attribute <a href="#workerglobalscope">WorkerGlobalScope</a> <a href="#self" title=dom-WorkerGlobalScope-self>self</a>;
1228 wakaba 1.23 readonly attribute <a href="#workerlocation">WorkerLocation</a> <a href="#location" title=dom-WorkerGlobalScope-location>location</a>;
1229 wakaba 1.29 // also implements everything on <a href="#workerutils">WorkerUtils</a>
1230    
1231 wakaba 1.22 void <a href="#close" title=dom-WorkerGlobalScope-close>close</a>();
1232 wakaba 1.29 attribute <span>EventListener</span> <a href="#onclose" title=handler-WorkerGlobalScope-onclose>onclose</a>;
1233 wakaba 1.48 attribute <span>EventListener</span> <a href="#onerror" title=handler-WorkerGlobalScope-onerror>onerror</a>;
1234 wakaba 1.36 };</span></pre>
1235 wakaba 1.9
1236 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="1eaadf1fd34d0295b8799d73be1a9135"><span class=en-original lang=en>Objects implementing the <code><a
1237     href="#workerglobalscope">WorkerGlobalScope</a></code> interface must also
1238     implement the <code>EventTarget</code> interface.
1239 wakaba 1.23
1240 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="087af626d2f79d49dcf366c0227c32c0"><span class=en-original lang=en>The <dfn id=self
1241 wakaba 1.22 title=dom-WorkerGlobalScope-self><code>self</code></dfn> attribute must
1242     return the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code>
1243     object itself.
1244    
1245 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="8e9bf18a7820b4401892ba71daf05527"><span class=en-original lang=en>The <dfn id=location
1246 wakaba 1.23 title=dom-WorkerGlobalScope-location><code>location</code></dfn> attribute
1247     must return the <code><a href="#workerlocation">WorkerLocation</a></code>
1248     object created for the <code><a
1249     href="#workerglobalscope">WorkerGlobalScope</a></code> object when the
1250     worker was created. It represents the <span>absolute URL</span> of the
1251     script that was used to initialize the worker.
1252 wakaba 1.22
1253 wakaba 1.36 </span><hr>
1254 wakaba 1.29
1255 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
1256 wakaba 1.29 title=dom-WorkerGlobalScope-close><code>close()</code></dfn> method on a
1257     <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object,
1258     the user agent must run the following steps:
1259    
1260 wakaba 1.36 </span><ol>
1261 wakaba 1.29 <li>
1262 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="60169fead4ccffa67d9a836cd2db0eda"><span class=en-original lang=en><span>Queue a task</span> to <span>fire a simple event</span> called
1263     <code title=event-close>close</code> at the <code><a
1264     href="#workerglobalscope">WorkerGlobalScope</a></code> object.
1265 wakaba 1.29
1266 wakaba 1.36 </span><li>
1267     <p class="no-ja-translation" data-ja-hash="6243c3e4951724a3633743634fccb06e"><span class=en-original lang=en>Set the worker's <code><a
1268 wakaba 1.29 href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1269     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag to
1270     true.
1271    
1272 wakaba 1.36 </span><li>
1273 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="facd4a44e5a83273873024773bc8359e"><span class=en-original lang=en>For each <code>MessagePort</code> object that is entangled with
1274 wakaba 1.29 another port and that has one (but only one) port whose owner is the
1275     <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object
1276     on which the method was invoked (this would include, for instance, the
1277 wakaba 1.46 implicit port in used for dedicated workers), unentangle the two ports.
1278     </span></ol>
1279 wakaba 1.9
1280 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
1281 wakaba 1.22 must be supported by objects implementing the <code><a
1282     href="#workerglobalscope">WorkerGlobalScope</a></code> interface:
1283    
1284 wakaba 1.36 </span><dl>
1285     <dt class="no-ja-translation" data-ja-hash="96d62a92c59fca4cd2589c560425090f"><span class=en-original lang=en><dfn id=onclose
1286 wakaba 1.29 title=handler-WorkerGlobalScope-onclose><code>onclose</code></dfn>
1287 wakaba 1.11
1288 wakaba 1.36 </span><dd>
1289     <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
1290 wakaba 1.32 is targeted at or bubbles through the <code><a
1291     href="#workerglobalscope">WorkerGlobalScope</a></code> object.
1292 wakaba 1.48
1293     </span><span class=ja-translation lang=ja><code title=event-close>close</code> 事象が当該 <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1294     呼び出されなければなりません。</span><dt class="no-ja-translation" data-ja-hash="218f1d215c51e4b4df0c668fe3526b03"><span class=en-original lang=en><dfn id=onerror
1295     title=handler-WorkerGlobalScope-onerror><code>onerror</code></dfn>
1296    
1297     </span><dd>
1298     <p class="has-ja-translation" data-ja-hash="72f216c6afeb138f136654f74a0585d6" data-ja-real-hash="9b3ad3aa7c6081a1e0b506a93c963c5b"><span class=en-original lang=en>Must be invoked whenever an <code title=event-error>error</code> event
1299     is targeted at or bubbles through the element.</span><span class=ja-translation lang=ja><code title=event-error>error</code> 事象が当該要素を対象としているか、泡立って当該要素を通過する時には、
1300     常に呼び出されなければ<em class=rfc2119 title="MUST">なりません</em>。</span></p>
1301    
1302     <p class="no-ja-translation" data-ja-hash="707bda20aaa1fe8785d4a63d976c4793"><span class=en-original lang=en>The initial value of <code title=handler-WorkerGlobalScope-onerror><a
1303     href="#onerror">onerror</a></code> must be <code>undefined</code>.
1304     </span></dl>
1305 wakaba 1.29
1306 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
1307 wakaba 1.29 <code><a
1308     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1309 wakaba 1.36 interface</span></h4>
1310 wakaba 1.50 <!-- the XXX below is for collapsing this interface onto WorkerGlobalScope so it looks like just one interface - the inheritance is a spec fiction only -->
1311 wakaba 1.29
1312     <pre
1313 wakaba 1.50 class="idl no-ja-translation" data-ja-hash="817afbdc0867386ba16e8a0ed83a2c3b"><span class=en-original lang=en>[NoInterfaceObject, XXX] interface <dfn id=dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</dfn> : <a href="#workerglobalscope">WorkerGlobalScope</a> {
1314     void <a href="#postmessage" title=dom-DedicatedWorkerGlobalScope-postMessage>postMessage</a>(in any message, [Optional] in <span>MessagePort</span> messagePort);<!--
1315     <span>MessagePort</span> <span title="dom-DedicatedWorkerGlobalScope-startConversation">startConversation</span>(in any message);-->
1316 wakaba 1.29 attribute <span>EventListener</span> <a href="#onmessage" title=handler-DedicatedWorkerGlobalScope-onmessage>onmessage</a>;
1317 wakaba 1.36 };</span></pre>
1318 wakaba 1.29
1319 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="c6ea7d83d489d6962a5dafa4cb9883ac"><span class=en-original lang=en><code><a
1320 wakaba 1.29 href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1321     objects act as if they had an implicit <code>MessagePort</code> associated
1322     with them. This port is part of a channel that is set up when the worker
1323     is created, but it is not exposed. This object must never be garbage
1324     collected before the <code><a
1325     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1326     object.
1327    
1328 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
1329 wakaba 1.29 the <code><a
1330     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1331     object.
1332    
1333 wakaba 1.42 </span><p class="no-ja-translation" data-ja-hash="c343842e8ec7635e987fef78935dd0ae"><span class=en-original lang=en>The <dfn id=postmessage
1334     title=dom-DedicatedWorkerGlobalScope-postMessage><code>postMessage()</code></dfn><!--
1335     and <dfn
1336     title="dom-DedicatedWorkerGlobalScope-startConversation"><code>startConversation()</code></dfn>-->
1337     method<!--s (startConversation)--> on <code><a
1338 wakaba 1.29 href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1339 wakaba 1.42 objects must act as if, when invoked, it<!--/they (startConversation)-->
1340     immediately invoked the method of the same name on the port, with the same
1341     arguments, and returned the same return value.
1342 wakaba 1.29
1343 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
1344 wakaba 1.29 must be supported by objects implementing the <code><a
1345     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1346     interface:
1347    
1348 wakaba 1.36 </span><dl>
1349     <dt class="no-ja-translation" data-ja-hash="160334ee188f54bd11cad6927542df5d"><span class=en-original lang=en><dfn id=onmessage
1350 wakaba 1.29 title=handler-DedicatedWorkerGlobalScope-onmessage><code>onmessage</code></dfn>
1351 wakaba 1.11
1352 wakaba 1.36 </span><dd>
1353     <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
1354 wakaba 1.32 title=event-DedicatedWorkerGlobalScope-message>message</code> event is
1355     targeted at or bubbles through the <code><a
1356     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1357     object.
1358     </span><span class=ja-translation lang=ja><code title=event-DedicatedWorkerGlobalScope-message>message</code> 事象が当該 <code><a href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1359 wakaba 1.12 呼び出されなければなりません。</span></dl>
1360 wakaba 1.11
1361 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
1362 wakaba 1.29 <code><a
1363     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
1364 wakaba 1.36 inteface</span></h4>
1365 wakaba 1.50 <!-- the XXX below is for collapsing this interface onto WorkerGlobalScope so it looks like just one interface - the inheritance is a spec fiction only -->
1366 wakaba 1.29
1367     <pre
1368 wakaba 1.50 class="idl no-ja-translation" data-ja-hash="26beedd870e9a7ebdb290905ca86d932"><span class=en-original lang=en>[NoInterfaceObject, XXX] interface <dfn id=sharedworkerglobalscope>SharedWorkerGlobalScope</dfn> : <a href="#workerglobalscope">WorkerGlobalScope</a> {
1369 wakaba 1.29 readonly attribute DOMString <a href="#name" title=dom-SharedWorkerGlobalScope-name>name</a>;
1370     attribute <span>EventListener</span> <a href="#onconnect" title=handler-SharedWorkerGlobalScope-onconnect>onconnect</a>;
1371 wakaba 1.36 };</span></pre>
1372 wakaba 1.29
1373 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
1374 wakaba 1.29 title=event-WorkerGlobalScope-connect>connect</code> events on their
1375     global object for each connection.
1376    
1377 wakaba 1.36 </span><span class=ja-translation lang=ja>共有労働者は、各接続について大域オブジェクトの <code
1378     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
1379 wakaba 1.29 title=dom-SharedWorkerGlobalScope-name><code>name</code></dfn> attribute
1380     must return the value it was assigned when the <code><a
1381     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> object
1382     was created by the "<a href="#run-a">run a worker</a>" algorithm. Its
1383     value represents the name that can be used to obtain a reference to the
1384     worker using the <code><a href="#sharedworker">SharedWorker</a></code>
1385     constructor.
1386    
1387 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
1388 wakaba 1.29 must be supported by objects implementing the <code><a
1389     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
1390     interface:
1391    
1392 wakaba 1.36 </span><dl>
1393     <dt class="no-ja-translation" data-ja-hash="bb403ab8991a4f893a1ad1d0ffad30b0"><span class=en-original lang=en><dfn id=onconnect
1394 wakaba 1.29 title=handler-SharedWorkerGlobalScope-onconnect><code>onconnect</code></dfn>
1395    
1396 wakaba 1.36 </span><dd>
1397     <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
1398 wakaba 1.32 title=event-SharedWorkerGlobalScope-connect>connect</code> event is
1399     targeted at or bubbles through the <code><a
1400     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
1401     object.
1402     </span><span class=ja-translation lang=ja><code title=event-SharedWorkerGlobalScope-connect>connect</code> 事象が当該 <code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1403 wakaba 1.29 呼び出されなければなりません。</span></dl>
1404 wakaba 1.23
1405 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
1406 wakaba 1.32 workers</span><span class=ja-translation lang=ja><span class=secno>2.2 </span>労働者の基底 URL と起源</span></h3>
1407 wakaba 1.16
1408 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="7f0ec0a21b0d5485348f47fb8c3ac07a"><span class=en-original lang=en>Both the <span>origin</span> and <span>effective script origin</span> of
1409 wakaba 1.22 scripts running in workers are the <span>origin</span> of the
1410 wakaba 1.46 <span>absolute URL</span> given in that the worker's <code
1411 wakaba 1.23 title=dom-WorkerGlobalScope-location><a
1412     href="#location">location</a></code> attribute represents.
1413 wakaba 1.22
1414 wakaba 1.46 </span><h3 id=the-event class="no-ja-translation" data-ja-hash="96715962ce61ea28085d7e170ec30e73"><span class=en-original lang=en><span class=secno>2.3 </span>The event loop</span></h3>
1415 wakaba 1.22
1416 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="8046b35e9604831cd24f5fd09bb3b9de"><span class=en-original lang=en>Each <code><a href="#workerglobalscope">WorkerGlobalScope</a></code>
1417     object is asssociated with a <span>event loop</span>. This <span>event
1418     loop</span> has no associated <span>browsing context</span>, and its <span
1419     title="task queue">task queues</span> only have events, callbacks, and
1420     networking activity as <span title=concept-task>tasks</span>. The
1421     processing model of these <span title="event loop">event loops</span> is
1422     defined below in the <a href="#run-a">run a worker</a> algorithm.
1423 wakaba 1.31
1424 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>
1425 wakaba 1.29 object also has a <dfn id=closing
1426     title=dom-WorkerGlobalScope-closing>closing</dfn> flag, which must
1427     initially be false, but which can get set to true by the algorithms in the
1428     processing model section below.
1429    
1430 wakaba 1.46 </span><p class="no-ja-translation" data-ja-hash="f6e75a83e42204ac3c8508f490737285"><span class=en-original lang=en>Once the <code><a
1431 wakaba 1.29 href="#workerglobalscope">WorkerGlobalScope</a></code>'s <a
1432     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag is
1433 wakaba 1.46 set to true, the <span>event loop</span>'s <span title="task queue">task
1434     queues</span> must discard any further <span
1435     title=concept-task>tasks</span> that would be added to them (tasks already
1436     on the queue are unaffected unless otherwise specified). Effectively, once
1437     the <a href="#closing" title=dom-WorkerGlobalScope-closing>closing</a>
1438     flag is true, timers stop firing, notifications for all pending
1439     asynchronous operations are dropped, etc.
1440 wakaba 1.22
1441 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>
1442 wakaba 1.11
1443 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
1444 wakaba 1.32 context">browsing contexts</span> through <span title="channel
1445     messaging">message channels</span> and their <code>MessagePort</code>
1446     objects.
1447    
1448     </span><span class=ja-translation lang=ja>労働者は、メッセージ通信路とその <code>MessagePort</code>
1449 wakaba 1.46 オブジェクトを通じて、他の労働者や閲覧文脈と通信します。</span><p class="no-ja-translation" data-ja-hash="ccdafdb171657866dab61ba28a500549"><span class=en-original lang=en>Each <code><a href="#workerglobalscope">WorkerGlobalScope</a></code>
1450 wakaba 1.29 <var title="">worker global scope</var> has a list of <dfn
1451     id=the-workers0>the worker's ports</dfn>, which consists of all the
1452     <code>MessagePort</code> objects that are entangled with another port and
1453     that have one (but only one) port owned by <var title="">worker global
1454 wakaba 1.43 scope</var>. This list includes
1455     <!--all the <code>MessagePort</code> objects that are in events
1456 wakaba 1.46 pending in the <span>event loop</span>, as well as (commented out
1457     because in practice it makes no difference either way as far as I
1458     can tell, and it would be hard to strictly implement since these
1459 wakaba 1.43 ports might not yet be across the thread boundary)-->
1460     the implicit <code>MessagePort</code> in the case of <a
1461 wakaba 1.29 href="#dedicatedworkerglobalscope"
1462     title=DedicatedWorkerGlobalScope>dedicated workers</a>.
1463 wakaba 1.16
1464 wakaba 1.36 </span><hr>
1465 wakaba 1.16
1466 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
1467 wakaba 1.23 either:
1468    
1469 wakaba 1.36 </span><ul>
1470     <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
1471 wakaba 1.23 worker was entangled with a <code>MessagePort</code> <var
1472     title="">p</var> whose owner is a <code>Window</code> object whose
1473     <span>active document</span> is the <code>Document</code> that was that
1474     <span>browsing context</span>'s <span>active document</span> when <var
1475     title="">p</var> was created, and that <code>Document</code> is
1476     <span>fully active</span>, or
1477    
1478 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
1479 wakaba 1.23 worker was entangled with a <code>MessagePort</code> owned by another
1480     worker that is currently a <a href="#permissible">permissible worker</a>.
1481 wakaba 1.36 </span></ul>
1482 wakaba 1.23
1483     <hr>
1484    
1485 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
1486 wakaba 1.23 either:
1487    
1488 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者は、次のいずれかの場合、<dfn id=protected>保護労働者</dfn>であるといいます。</span><ul>
1489 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
1490     connections, and is a <a href="#permissible">permissible worker</a>, or
1491 wakaba 1.23
1492 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
1493 wakaba 1.23 point past or present owned a <code>MessagePort</code> that was entangled
1494     with a <code>MessagePort</code> owned by this worker.
1495 wakaba 1.36 </span></ul>
1496 wakaba 1.23
1497     <hr>
1498    
1499 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
1500 wakaba 1.23 either:
1501    
1502 wakaba 1.36 </span><ul>
1503     <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
1504 wakaba 1.23
1505 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
1506 wakaba 1.23 entangled with a <code>MessagePort</code> <var title="">p</var> whose
1507     owner is a <code>Window</code> object whose <span>active document</span>
1508     is the <code>Document</code> that was that <span>browsing
1509     context</span>'s <span>active document</span> when that
1510     <code>MessagePort</code> <var title="">p</var> was created, and that
1511     <code>Document</code> is <span>fully active</span>, or
1512 wakaba 1.22
1513 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
1514 wakaba 1.22 an entangled <code>MessagePort</code> owned by a <code><a
1515     href="#workerglobalscope">WorkerGlobalScope</a></code> object that is
1516 wakaba 1.23 itself an <a href="#active">active needed worker</a>.
1517 wakaba 1.36 </span></ul>
1518 wakaba 1.22
1519     <hr>
1520    
1521 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
1522 wakaba 1.23 it is not an <a href="#active">active needed worker</a> but either:
1523 wakaba 1.22
1524 wakaba 1.36 </span><ul>
1525     <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
1526 wakaba 1.23 an entangled <code>MessagePort</code> owned by a <code>Window</code>
1527     object, or
1528    
1529 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
1530 wakaba 1.22 an entangled <code>MessagePort</code> owned by a <code><a
1531     href="#workerglobalscope">WorkerGlobalScope</a></code> object that is
1532 wakaba 1.23 itself a <span>needed worker</span>.
1533 wakaba 1.36 </span></ul>
1534 wakaba 1.16
1535 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>
1536 wakaba 1.12
1537 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="6c621932d8bc183c82dfb194ec31737c"><span class=en-original lang=en>When a user agent is to <dfn id=run-a>run a worker</dfn> for a script
1538 wakaba 1.29 with <span>URL</span> <var title="">url</var>, a browsing context <var
1539 wakaba 1.46 title="">owner browsing context</var>, and with global scope <var
1540     title="">worker global scope</var>, it must run the following steps:
1541    
1542     </span><ol>
1543 wakaba 1.12 <li>
1544 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.
1545 wakaba 1.30 a separate thread or process or equivalent construct), and run the rest
1546 wakaba 1.36 of these steps asychronously in that context.</span><span class=ja-translation lang=ja>完全に分離された並列の実行環境 (すなわち、別のスレッドやプロセスや等価な構造体) を作り、
1547     その文脈で非同期にこれらの段階の残りを走らせます。</span></p>
1548 wakaba 1.30
1549     <li>
1550 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="83920af54821d7c307267e9565d86ea3"><span class=en-original lang=en>Attempt to <span>fetch</span> the resource identified by <var
1551     title="">url</var>.</span></p>
1552 wakaba 1.12
1553 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="bcdbb2d404cc07bab9cf5d4d7c39f469"><span class=en-original lang=en>If the attempt fails, then for each <code><a
1554     href="#worker1">Worker</a></code> or <code><a
1555     href="#sharedworker">SharedWorker</a></code> object associated with <var
1556     title="">worker global scope</var>, <span>queue a task</span> to
1557     <span>fire a simple event</span> called <code
1558     title=event-error>error</code> at that object. Abort these steps.</span></p>
1559    
1560     <p class="no-ja-translation" data-ja-hash="5f99e80db6dd85e61521ca081da0a897"><span class=en-original lang=en>If the attempt succeeds, then let <var title="">source</var> be the
1561     text of the resource that was obtained.</span></p>
1562     <!-- XXX do we need
1563     to define character encoding decoding here? -->
1564     <p class="no-ja-translation" data-ja-hash="c880bce97c5a1aadccd8989fc4ec8551"><span class=en-original lang=en>Let <var title="">language</var> be JavaScript.</span></p>
1565 wakaba 1.12
1566 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
1567 wakaba 1.32 script is ignored. Unlike with <code>script</code> elements, there is no
1568     way to override the type. It's always assumed to be JavaScript.</span><span class=ja-translation lang=ja><code>script</code> 要素と同様に、スクリプトの MIME 型は無視します。
1569 wakaba 1.12 <code>script</code> 要素とは異なり、
1570     型を上書きする方法はありません。スクリプトは常に JavaScript
1571     と仮定します。</span></p>
1572 wakaba 1.11 <!-- XXX people will complain about
1573     this. I guess we might want to examine the MIME type... -->
1574    
1575    
1576     <li>
1577 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="604d3f52a6756f627f0e747b0d06e6ae"><span class=en-original lang=en>A new <span title=concept-script>script</span> is now created, as
1578     follows.</span></p>
1579 wakaba 1.23
1580 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="2dfcd0f76cde607de6cc88d70f390825"><span class=en-original lang=en>Create a new <span>script execution environment</span> set up as
1581     appropriate for the scripting language <var title="">language</var>.</span></p>
1582    
1583     <p class="no-ja-translation" data-ja-hash="fdf8b5f9ba18a31a8f48670142f51442"><span class=en-original lang=en>Parse/compile/initialize <var title="">source</var> using that
1584     <span>script execution environment</span>, as appropriate for <var
1585     title="">language</var>, and thus obtain a <span>list of code
1586     entry-points</span>; set the <i>initial code entry-point</i> to the
1587     entry-point for any executable code to be immediately run.</span></p>
1588    
1589     <p class="no-ja-translation" data-ja-hash="129927904de4572e52f5bc380711aa10"><span class=en-original lang=en>Set the <span>script's global object</span> to <var title="">worker
1590 wakaba 1.36 global scope</var>.</span></p>
1591 wakaba 1.9
1592 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="02eeb9a0f925368a93666886c94bf9bf"><span class=en-original lang=en>Set the <span>script's browsing context</span> to <var title="">owner
1593     browsing context</var>.</span></p>
1594    
1595     <p class="no-ja-translation" data-ja-hash="99ad90cb28611ed3165f61e920e91176"><span class=en-original lang=en>Set the <span>script's character encoding</span> to UTF-8. (This is
1596     just used for encoding non-ASCII characters in the query component of
1597     URLs.)</span></p>
1598    
1599     <p class="no-ja-translation" data-ja-hash="7570c80d1bbf45f73eb74befed51740d"><span class=en-original lang=en>Set the <span>script's base URL</span> to <var title="">url</var>.</span></p>
1600 wakaba 1.9
1601 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="9f54fba41a34171b216a6a1d3c585815"><span class=en-original lang=en>Create a new <span>script group</span> and add the <span
1602     title=concept-script>script</span> to it.</span></p>
1603 wakaba 1.9
1604     <li>
1605 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="f548a19eebea0d9f12ddb68a933793f7"><span class=en-original lang=en><strong>Closing orphan workers</strong>: Start monitoring the worker
1606 wakaba 1.29 such that as soon as it stops being either an <a href="#active">active
1607     needed worker</a> or a <a href="#suspendable">suspendable worker</a>,
1608 wakaba 1.46 <var title="">worker global scope</var>'s <a href="#closing"
1609 wakaba 1.29 title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true and
1610 wakaba 1.46 <span title="queue a task">a task is queued</span> to <span>fire a
1611     simple event</span> called <code title=event-close>close</code> at <var
1612     title="">worker global scope</var>.</span></p>
1613 wakaba 1.29
1614     <li>
1615 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="b95907577fdce09e85f276964e7aff6b"><span class=en-original lang=en><strong>Suspending workers</strong>: Start monitoring the worker, such
1616     that whenever <var title="">worker global scope</var>'s <a
1617 wakaba 1.29 href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag is
1618     false and the worker is a <a href="#suspendable">suspendable worker</a>,
1619     the user agent suspends execution of script in that worker until such
1620     time as either the <a href="#closing"
1621     title=dom-WorkerGlobalScope-closing>closing</a> flag switches to true or
1622 wakaba 1.36 the worker stops being a <a href="#suspendable">suspendable worker</a>.</span></p>
1623 wakaba 1.29
1624     <li>
1625 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="80776610bb705112feb2564b4496fe2f"><span class=en-original lang=en><span title="jump to a code entry-point">Jump</span> to the <span
1626     title=concept-script>script</span>'s <i>initial code entry-point</i>,
1627     and let that run until it either returns, fails to catch an exception,
1628     or gets prematurely aborted by the "<a href="#kill-a">kill a worker</a>"
1629     or "<a href="#terminate">terminate a worker</a>" algorithms defined
1630     below.</span></p>
1631    
1632     <p class="note no-ja-translation" data-ja-hash="76ad23661ba827d4b68ad1fc3a138902"><span class=en-original lang=en>If the script gets aborted by the "<a href="#kill-a">kill a
1633 wakaba 1.23 worker</a>" algorithm, then that same algorithm will cause there to only
1634 wakaba 1.46 be a single <span title=concept-task>task</span> in the <span>event
1635     loop</span> at the next step, namely the task for the <code
1636     title=message-close>close</code> event. The "<a
1637     href="#terminate">terminate a worker</a>" algorithm removes all the
1638 wakaba 1.36 events.</span></p>
1639 wakaba 1.9
1640     <li>
1641 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="6e519912f34fcb58933d31516eec2c61"><span class=en-original lang=en><i title="">Event loop</i>: Wait until either there is a <span
1642     title=concept-task>task</span> in one of the <span>event loop</span>'s
1643     <span title="task queue">task queues</span> or <var title="">worker
1644     global scope</var>'s <a href="#closing"
1645     title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true.</span></p>
1646    
1647     <li>
1648     <p class="no-ja-translation" data-ja-hash="bcc803e78dd6f07ff20eaa1ca0d23303"><span class=en-original lang=en>Run the oldest task on one of the <span>event loop</span>'s <span
1649     title="task queue">task queues</span>, if any. The user agent may pick
1650     any <span>task queue</span>.</span></p>
1651    
1652     <p class="note no-ja-translation" data-ja-hash="5fb6077bc30bf5b7fb16c61195f68ec4"><span class=en-original lang=en>The handling of events or the execution of callbacks might
1653     get prematurely aborted by the "<a href="#kill-a">kill a worker</a>" or
1654     "<a href="#terminate">terminate a worker</a>" algorithms defined below.</span></p>
1655 wakaba 1.9
1656     <li>
1657 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="0a62cf7225c4d215f05940236b695d05"><span class=en-original lang=en>Remove the task run in the previous step, if any, from its <span>task
1658     queue</span>.</span></p>
1659 wakaba 1.9
1660     <li>
1661 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="1e197805331dfc3aa6f8583697d9d623"><span class=en-original lang=en>If there are any more events in the <span>event loop</span>'s <span
1662     title="task queue">task queues</span> or if <var title="">worker global
1663     scope</var>'s <a href="#closing"
1664     title=dom-WorkerGlobalScope-closing>closing</a> flag is set to false,
1665     then jump back to the step above labeled <i>event loop</i>.</span></p>
1666 wakaba 1.9
1667     <li>
1668 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="76aff645037fb93242c0b3e0ed29b90b"><span class=en-original lang=en>Freeze the <span>script group</span>.</span></p>
1669    
1670     <p class="note no-ja-translation" data-ja-hash="d32bd424c711e966967069f368ca26ad"><span class=en-original lang=en>This kills timers, database transactions, etc.</span></p>
1671 wakaba 1.25
1672     <li>
1673 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="b39a2b11a64a8558d8c9ae5c739879a1"><span class=en-original lang=en>For each <code><a href="#worker1">Worker</a></code> or <code><a
1674     href="#sharedworker">SharedWorker</a></code> object associated with <var
1675     title="">worker global scope</var>, <span>queue a task</span> to
1676     <span>fire a simple event</span> called <code
1677     title=event-close>close</code> at that object.</span></p>
1678 wakaba 1.9 </ol>
1679    
1680     <hr>
1681    
1682 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
1683 wakaba 1.29 the following steps in parallel with the worker's main loop (the "<a
1684     href="#run-a">run a worker</a>" processing model defined above):
1685    
1686 wakaba 1.36 </span><ol>
1687 wakaba 1.14 <li>
1688 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="a76ddc03676d95e40e0240ba3be551c8"><span class=en-original lang=en>If the worker's <code><a
1689 wakaba 1.22 href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1690 wakaba 1.46 href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag is
1691     false, <span>queue a task</span> to <span>fire a simple event</span>
1692     called <code title=event-close>close</code> at the worker's <code><a
1693     href="#workerglobalscope">WorkerGlobalScope</a></code> object.
1694 wakaba 1.22
1695 wakaba 1.46 </span><li>
1696 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="6243c3e4951724a3633743634fccb06e"><span class=en-original lang=en>Set the worker's <code><a
1697 wakaba 1.29 href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1698     href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag to
1699     true.
1700 wakaba 1.22
1701 wakaba 1.36 </span><li>
1702     <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
1703 wakaba 1.23 a worker</a>" processing model defined above immediately starts running
1704 wakaba 1.29 event listeners registered for the <code title=event-close>close</code>
1705     event, this time should not be zero &mdash; the idea is that the <code
1706     title=event-close>close</code> event can be used to clean up when
1707     shutting down unexpectedly.
1708    
1709 wakaba 1.36 </span><li>
1710 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="e062300b1a0b646e14e0f8d084f3ab6a"><span class=en-original lang=en>If there are any <span title=concept-task>tasks</span> queued in the
1711     <span>event loop</span>'s <span title="task queue">task queues</span>
1712 wakaba 1.29 other than the <code title=event-close>close</code> event that this
1713 wakaba 1.46 algorithm just added, discard them without processing them.
1714 wakaba 1.29
1715 wakaba 1.36 </span><li>
1716 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="e9d30d31f5050c8a6a15b9c403a3573a"><span class=en-original lang=en>If the <code title=event-close>close</code> event that this algorithm
1717     just queued hasn't yet been dispatched, then abort the script currently
1718 wakaba 1.29 running in the worker.
1719 wakaba 1.23
1720 wakaba 1.46 </span><li>
1721 wakaba 1.36 <p class="has-ja-translation" data-ja-hash="a53f0acde0e4a21781c4b31d5a0f110a"><span class=en-original lang=en>Wait a user-agent-defined amount of time.
1722 wakaba 1.32
1723     </span><span class=ja-translation lang=ja>利用者エージェント定義の時間、待ちます。</span><li>
1724 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
1725 wakaba 1.29 running, then it will be a handler for the <code
1726     title=event-close>close</code> event).
1727 wakaba 1.36 </span><span class=ja-translation lang=ja>労働者中で現在走っているスクリプトを停止します
1728     (何かスクリプトが走っているとすれば、それは <code
1729     title=event-close>close</code>
1730     事象の取扱器のはずです)。</span></ol>
1731 wakaba 1.9
1732 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>"
1733 wakaba 1.22 processing model on a worker at any time, e.g. in response to user
1734     requests, in response to CPU quota management, or when a worker stops
1735 wakaba 1.23 being an <a href="#active">active needed worker</a> if the worker
1736 wakaba 1.29 continues executing even after its <a href="#closing"
1737     title=dom-WorkerGlobalScope-closing>closing</a> flag was set to true.
1738 wakaba 1.16
1739 wakaba 1.36 </span><hr>
1740 wakaba 1.11
1741 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
1742 wakaba 1.30 must run the following steps in parallel with the worker's main loop (the
1743     "<a href="#run-a">run a worker</a>" processing model defined above):
1744 wakaba 1.22
1745 wakaba 1.36 </span><ol>
1746 wakaba 1.22 <li>
1747 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="6243c3e4951724a3633743634fccb06e"><span class=en-original lang=en>Set the worker's <code><a
1748 wakaba 1.22 href="#workerglobalscope">WorkerGlobalScope</a></code> object's <a
1749 wakaba 1.29 href="#closing" title=dom-WorkerGlobalScope-closing>closing</a> flag to
1750     true.
1751 wakaba 1.22
1752 wakaba 1.36 </span><li>
1753 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="a9cf50df3de2e3788a3125ace8cf61f5"><span class=en-original lang=en>If there are any <span title=concept-task>tasks</span> queued in the
1754     <span>event loop</span>'s <span title="task queue">task queues</span>,
1755     discard them without processing them.
1756 wakaba 1.22
1757 wakaba 1.36 </span><li>
1758     <p class="has-ja-translation" data-ja-hash="fcb471f3c8cace3a86095dcb29d25515"><span class=en-original lang=en>Abort the script currently running in the worker.
1759 wakaba 1.47
1760     </span><span class=ja-translation lang=ja>労働者中で現在走っているスクリプトを停止します。</span><li>
1761     <p class="no-ja-translation" data-ja-hash="ef13ce5f71f3f69e0dafefdd9f47eccc"><span class=en-original lang=en>If the worker's <code><a
1762     href="#workerglobalscope">WorkerGlobalScope</a></code> object is
1763     actually a <code><a
1764     href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1765     object (i.e. the worker is a dedicated worker), then empty the
1766     <span>port message queue</span> of the port that the worker's implicit
1767     port is entangled with.
1768     </span></ol>
1769 wakaba 1.11
1770 wakaba 1.48 <h4 id=runtime class="has-ja-translation" data-ja-hash="eb260f04266c3b94080b5c3f88c55a31"><span class=en-original lang=en><span class=secno>2.5.1 </span>Runtime script errors</span><span class=ja-translation lang=ja><span class=secno>2.5.1 </span>実行時スクリプト誤り</span></h4>
1771    
1772     <p class="no-ja-translation" data-ja-hash="8a61ca3c8edd388fa22ec61b11813a2e"><span class=en-original lang=en>Whenever a runtime script error occurs in one of the worker's scripts,
1773     the user agent must <span>report the error</span> using the <code
1774     title=handler-WorkerGlobalScope-onerror><a
1775     href="#onerror">onerror</a></code> <span title="event handler DOM
1776     attributes">event handler DOM attribute</span> of the <code><a
1777     href="#workerglobalscope">WorkerGlobalScope</a></code> object.
1778    
1779     </span><p class="no-ja-translation" data-ja-hash="60c4580e0f515ada923f347f0ae3f6c4"><span class=en-original lang=en>For shared workers, if the error is still <i title="">not handled</i>
1780     afterwards, the error should be reported to the user.
1781    
1782     </span><p class="no-ja-translation" data-ja-hash="3b0ebe7f2601491d63c8acf748ce7193"><span class=en-original lang=en>For dedicated workers, if the error is still <i title="">not handled</i>
1783     afterwards, <span>queue a task</span> to <a href="#fire-an">fire an error
1784     event</a> at the <code><a href="#worker1">Worker</a></code> object
1785     associated with the worker.
1786    
1787 wakaba 1.49 </span><p class="no-ja-translation" data-ja-hash="f1840669d4137e6f15d427f7989756b6"><span class=en-original lang=en>When the user agent is to <dfn id=fire-an>fire an error event</dfn> at a
1788 wakaba 1.48 <code><a href="#worker1">Worker</a></code> object, it must dispatch an
1789     event that uses the <code><a href="#errorevent">ErrorEvent</a></code>
1790     interface, with the name <code title=event-error>error</code>, that
1791     doesn't bubble and is cancelable, with its <code
1792     title=dom-ErrorEvent-message><a href="#message">message</a></code>, <code
1793     title=dom-ErrorEvent-filename><a href="#filename">filename</a></code>, and
1794 wakaba 1.49 <code title=dom-ErrorEvent-lineno><a href="#lineno">lineno</a></code>
1795     attributes set appropriately. The default action of this event depends on
1796     whether the <code><a href="#worker1">Worker</a></code> object is itself in
1797     a worker. If it is, and that worker is also a dedicated worker, then the
1798     user agent must again <span>queue a task</span> to <a href="#fire-an">fire
1799     an error event</a> at the <code><a href="#worker1">Worker</a></code>
1800     object associated with <em>that</em> worker. Otherwise, then the error
1801     should be reported to the user.
1802 wakaba 1.48
1803     </span><hr>
1804    
1805 wakaba 1.49 <pre class="idl no-ja-translation" data-ja-hash="59e062a983391e726ed049c6ae57aaea"><span class=en-original lang=en>interface <dfn id=errorevent>ErrorEvent</dfn> : Event {
1806 wakaba 1.48 readonly attribute DOMObject <a href="#message" title=dom-ErrorEvent-message>message</a>;
1807     readonly attribute DOMObject <a href="#filename" title=dom-ErrorEvent-filename>filename</a>;
1808 wakaba 1.49 readonly attribute unsigned long <a href="#lineno" title=dom-ErrorEvent-lineno>lineno</a>;
1809     void <a href="#initerrorevent" title=dom-ErrorEvent-initErrorEvent>initErrorEvent</a>(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in DOMObject messageArg, in DOMObject filenameArg, in unsigned long linenoArg);
1810     void <a href="#initerroreventns" title=dom-ErrorEvent-initErrorEventNS>initErrorEventNS</a>(in DOMString namespaceURIArg, in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in DOMObject messageArg, in DOMObject filenameArg, in unsigned long linenoArg);
1811 wakaba 1.48 };</span></pre>
1812    
1813     <p class="no-ja-translation" data-ja-hash="9d43314493123a2b2149ea035cc1b572"><span class=en-original lang=en>The <dfn id=initerrorevent
1814     title=dom-ErrorEvent-initErrorEvent><code>initErrorEvent()</code></dfn>
1815     and <dfn id=initerroreventns
1816     title=dom-ErrorEvent-initErrorEventNS><code>initErrorEventNS()</code></dfn>
1817     methods must initialize the event in a manner analogous to the
1818     similarly-named methods in the DOM3 Events interfaces. <a
1819     href="#refsDOM3EVENTS">[DOM3EVENTS]</a>
1820    
1821     </span><p class="no-ja-translation" data-ja-hash="7d24fa221c135ec2b437946226400737"><span class=en-original lang=en>The <dfn id=message
1822     title=dom-ErrorEvent-message><code>message</code></dfn> attribute
1823     represents the error message.
1824    
1825     </span><p class="no-ja-translation" data-ja-hash="47c39cbddc08e2a5d463cd6e0a27d4b7"><span class=en-original lang=en>The <dfn id=filename
1826     title=dom-ErrorEvent-filename><code>filename</code></dfn> attribute
1827     represents the <span>absolute URL</span> of the script in which the error
1828     originally occured.
1829    
1830 wakaba 1.49 </span><p class="no-ja-translation" data-ja-hash="8f00dc144763f529c193251c4ae6579e"><span class=en-original lang=en>The <dfn id=lineno title=dom-ErrorEvent-lineno><code>lineno</code></dfn>
1831 wakaba 1.48 attribute represents the line number where the error occured in the
1832     script.
1833    
1834     </span><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>
1835 wakaba 1.9
1836 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
1837     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>
1838 wakaba 1.29
1839 wakaba 1.50 <pre class="idl no-ja-translation" data-ja-hash="c9e3c7c45c089ab5b21145c0aa2fb17e"><span class=en-original lang=en>interface <dfn id=abstractworker>AbstractWorker</dfn> {
1840 wakaba 1.48 attribute <span>EventListener</span> <a href="#onerror0" title=handler-AbstractWorker-onerror>onerror</a>;
1841 wakaba 1.29 attribute <span>EventListener</span> <a href="#onclose0" title=handler-AbstractWorker-onclose>onclose</a>;
1842 wakaba 1.36 };</span></pre>
1843 wakaba 1.29
1844 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="e39a76d762bfd9fb1a4ef6442ded36b3"><span class=en-original lang=en>Objects implementing the <code><a
1845     href="#abstractworker">AbstractWorker</a></code> interface must also
1846     implement the <code>EventTarget</code> interface.
1847    
1848     </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
1849 wakaba 1.29 must be supported by objects implementing the <code><a
1850     href="#abstractworker">AbstractWorker</a></code> interface:
1851    
1852 wakaba 1.36 </span><dl>
1853 wakaba 1.48 <dt class="no-ja-translation" data-ja-hash="9271e517353d64116733d90133259cae"><span class=en-original lang=en><dfn id=onerror0
1854 wakaba 1.29 title=handler-AbstractWorker-onerror><code>onerror</code></dfn>
1855    
1856 wakaba 1.36 </span><dd>
1857     <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
1858 wakaba 1.29 is targeted at or bubbles through the <code><a
1859     href="#abstractworker">AbstractWorker</a></code> object.
1860    
1861 wakaba 1.36 </span><dt class="no-ja-translation" data-ja-hash="a66f8d800a45cc2273dc71888c78ecd0"><span class=en-original lang=en><dfn id=onclose0
1862 wakaba 1.29 title=handler-AbstractWorker-onclose><code>onclose</code></dfn>
1863    
1864 wakaba 1.36 </span><dd>
1865     <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
1866 wakaba 1.29 is targeted at or bubbles through the <code><a
1867     href="#abstractworker">AbstractWorker</a></code> object.
1868 wakaba 1.36 </span></dl>
1869 wakaba 1.25
1870 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
1871     <code><a href="#worker1">Worker</a></code> interface</span></h4>
1872 wakaba 1.25
1873 wakaba 1.50 <pre
1874     class="idl no-ja-translation" data-ja-hash="08be78e654148934db6ca23bc36fa7f6"><span class=en-original lang=en>[<a href="#worker2" title=dom-Worker>Constructor</a>(in DOMString scriptURL)]
1875 wakaba 1.29 interface <dfn id=worker1>Worker</dfn> : <a href="#abstractworker">AbstractWorker</a> {
1876 wakaba 1.42 void <a href="#terminate0" title=dom-Worker-terminate>terminate</a>();
1877 wakaba 1.29
1878 wakaba 1.50 void <a href="#postmessage0" title=dom-Worker-postMessage>postMessage</a>(in any message, [Optional] in <span>MessagePort</span> messagePort);<!--
1879     <span>MessagePort</span> <span title="dom-Worker-startConversation">startConversation</span>(in any message);-->
1880 wakaba 1.29 attribute <span>EventListener</span> <a href="#onmessage0" title=handler-Worker-onmessage>onmessage</a>;
1881 wakaba 1.36 };</span></pre>
1882 wakaba 1.9
1883 wakaba 1.42 <p class="no-ja-translation" data-ja-hash="de30b8d41bcd89009d2aef1d62ea0b46"><span class=en-original lang=en>The <dfn id=terminate0
1884     title=dom-Worker-terminate><code>terminate()</code></dfn> method, when
1885     invoked, must cause the "<a href="#terminate">terminate a worker</a>"
1886     algorithm to be run on the worker with with the object is associated.
1887 wakaba 1.29
1888 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
1889 wakaba 1.29 implicit <code>MessagePort</code> associated with them. This port is part
1890     of a channel that is set up when the worker is created, but it is not
1891     exposed. This object must never be garbage collected before the <code><a
1892     href="#worker1">Worker</a></code> object.
1893    
1894 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
1895 wakaba 1.29 the <code><a href="#worker1">Worker</a></code> object.
1896    
1897 wakaba 1.42 </span><p class="no-ja-translation" data-ja-hash="5e032d219f702b8b96f218aacfba4c26"><span class=en-original lang=en>The <dfn id=postmessage0
1898     title=dom-Worker-postMessage><code>postMessage()</code></dfn><!--
1899     and <dfn
1900     title="dom-Worker-startConversation"><code>startConversation()</code></dfn>-->
1901     method<!--s (startConversation)--> on <code><a
1902     href="#worker1">Worker</a></code> objects must act as if, when invoked,
1903     it<!--/they (startConversation)--> immediately invoked the method of the
1904     same name on the port, with the same arguments, and returned the same
1905     return value.
1906 wakaba 1.29
1907 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
1908 wakaba 1.29 must be supported by objects implementing the <code><a
1909     href="#worker1">Worker</a></code> interface:
1910    
1911 wakaba 1.36 </span><dl>
1912     <dt class="no-ja-translation" data-ja-hash="1e7efb7f0b77ed1e6f543f6c9cc3387e"><span class=en-original lang=en><dfn id=onmessage0
1913 wakaba 1.29 title=handler-Worker-onmessage><code>onmessage</code></dfn>
1914    
1915 wakaba 1.36 </span><dd>
1916     <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
1917 wakaba 1.32 title=event-Worker-message>message</code> event is targeted at or
1918     bubbles through the <code><a href="#worker1">Worker</a></code> object.
1919     </span><span class=ja-translation lang=ja><code title=event-Worker-message>message</code> 事象が当該 <code><a href="#worker1">Worker</a></code> オブジェクトを対象としているか、泡立って当該オブジェクトを通過する時に、
1920 wakaba 1.29 呼び出されなければなりません。</span></dl>
1921 wakaba 1.22
1922     <hr>
1923 wakaba 1.13
1924 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
1925 wakaba 1.29 title="">scriptURL</var>)</code></dfn> constructor is invoked, the user
1926     agent must run the following steps:
1927    
1928 wakaba 1.36 </span><ol>
1929 wakaba 1.13 <li>
1930 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
1931 wakaba 1.32 title="">scriptURL</var> argument.
1932    
1933     </span><span class=ja-translation lang=ja><var
1934 wakaba 1.15 title="">scriptURL</var> 引数を<span title="resolve a url">解決</span>します。</span><li>
1935 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.
1936 wakaba 1.32
1937     </span><span class=ja-translation lang=ja>これが失敗した場合、 <code>SYNTAX_ERR</code>
1938 wakaba 1.15 例外を投げます。</span><li>
1939 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>
1940 wakaba 1.29 is not the <span title="same origin">same</span> as the origin of the
1941     script that invoked the constructor, then throw a <span>security
1942     exception</span>.
1943    
1944 wakaba 1.36 </span><li>
1945 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="1b3db8a7e7ece473ac900f50243dc62c"><span class=en-original lang=en><span>Create a new <code><a
1946 wakaba 1.29 href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
1947 wakaba 1.46 object</span>. Let <var title="">worker global scope</var> be this new
1948     object.
1949 wakaba 1.29
1950 wakaba 1.36 </span><li>
1951 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="ed81333a6158bdeffac41bdff6ec3c5a"><span class=en-original lang=en>Create a new <code><a href="#worker1">Worker</a></code> object,
1952     associated with <var title="">worker global scope</var>. Let <var
1953     title="">worker</var> be this new object.
1954 wakaba 1.29
1955 wakaba 1.36 </span><li>
1956     <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
1957 wakaba 1.29 <span>script execution context</span> of the script that invoked the
1958     method. Let this be the <var title="">outside port</var>.
1959    
1960 wakaba 1.36 </span><li>
1961     <p class="has-ja-translation" data-ja-hash="91024eaaebdc23ea683ace1b3e316962"><span class=en-original lang=en>Associate the <var title="">outside port</var> with <var
1962 wakaba 1.29 title="">worker</var>.
1963    
1964 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">outside port</var> を <var
1965     title="">worker</var> に関連付けます。</span><li>
1966 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="2d1b035dbaad3feca57eb124d161b034"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by <var
1967     title="">worker global scope</var>. Let <var title="">inside port</var>
1968     be this new object.
1969 wakaba 1.29
1970 wakaba 1.46 </span><li>
1971     <p class="no-ja-translation" data-ja-hash="c7df111ebbfeab4bffdbe80d19fdb0ba"><span class=en-original lang=en>Associate <var title="">inside port</var> with <var title="">worker
1972     global scope</var>.
1973 wakaba 1.29
1974 wakaba 1.46 </span><li>
1975 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
1976 wakaba 1.29 title="">inside port</var>.
1977    
1978 wakaba 1.36 </span><li>
1979     <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
1980 wakaba 1.29 asynchronously.
1981    
1982 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を返し、以降の段階を非同期に走らせます。</span><li>
1983     <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
1984 wakaba 1.29 queue</span>.
1985    
1986 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">inside port</var> の<span>ポート・メッセージ待ち行列</span>を開きます。</span><li>
1987     <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
1988 wakaba 1.30 queue</span>.
1989    
1990 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">outside port</var> の<span>ポート・メッセージ待ち行列</span>を開きます。</span><li>
1991 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="13490b80df7f929a817aaedc342318df"><span class=en-original lang=en><a href="#run-a">Run a worker</a> for the resulting <span>absolute
1992     URL</span>, with the <span>script browsing context</span> of the script
1993     that invoked the method as the <var title="">owner browsing
1994     context</var>, and with <var title="">worker global scope</var> as the
1995     global scope.</span></p>
1996 wakaba 1.25 </ol>
1997 wakaba 1.11
1998 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
1999     <code><a href="#sharedworker">SharedWorker</a></code> interface</span></h4>
2000 wakaba 1.29
2001 wakaba 1.50 <pre
2002     class="idl no-ja-translation" data-ja-hash="4efb684ac777c7e96a11f4ef746c6b8a"><span class=en-original lang=en>[<a href="#sharedworker0" title=dom-SharedWorker>Constructor</a>(in DOMString scriptURL, in DOMString name)]
2003 wakaba 1.29 interface <dfn id=sharedworker>SharedWorker</dfn> : <a href="#abstractworker">AbstractWorker</a> {
2004 wakaba 1.50 readonly attribute <span>MessagePort</span> <a href="#port" title=dom-SharedWorker-port>port</a>;
2005 wakaba 1.36 };</span></pre>
2006 wakaba 1.29
2007 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>
2008 wakaba 1.29 attribute must return the value it was assigned by the object's
2009     constructor. It represents the <code>MessagePort</code> for communicating
2010     with the shared worker.
2011    
2012 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="ec56f4c5071ac285686586d381295796"><span class=en-original lang=en>When the <dfn id=sharedworker0
2013 wakaba 1.29 title=dom-SharedWorker><code>SharedWorker(<var title="">scriptURL</var>,
2014     <var title="">name</var>)</code></dfn> constructor is invoked, the user
2015     agent must run the following steps:
2016 wakaba 1.11
2017 wakaba 1.36 </span><ol>
2018 wakaba 1.13 <li>
2019 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
2020 wakaba 1.32 title="">scriptURL</var> argument.
2021    
2022     </span><span class=ja-translation lang=ja><var
2023 wakaba 1.15 title="">scriptURL</var> 引数を<span title="resolve a url">解決</span>します。</span><li>
2024 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.
2025 wakaba 1.32
2026     </span><span class=ja-translation lang=ja>これが失敗した場合、 <code>SYNTAX_ERR</code>
2027 wakaba 1.15 例外を投げます。</span><li>
2028 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>
2029 wakaba 1.29 is not the <span title="same origin">same</span> as the origin of the
2030     script that invoked the constructor, then throw a <span>security
2031     exception</span>.
2032    
2033 wakaba 1.36 </span><li>
2034     <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>
2035 wakaba 1.13
2036     <ol>
2037     <li>
2038 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>
2039 wakaba 1.29 object, which will shortly be associated with a <code><a
2040     href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
2041     object. Let this <code><a href="#sharedworker">SharedWorker</a></code>
2042     object be <var title="">worker</var>.
2043 wakaba 1.22
2044 wakaba 1.36 </span><li>
2045     <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
2046 wakaba 1.29 <span>script execution context</span> of the script that invoked the
2047     method. Let this be the <var title="">outside port</var>.
2048 wakaba 1.25
2049 wakaba 1.36 </span><li>
2050     <p class="no-ja-translation" data-ja-hash="95cd5e27932141432ed9ff6323032568"><span class=en-original lang=en>Assign <var title="">outside port</var> to the <code
2051 wakaba 1.29 title=dom-SharedWorker-port><a href="#port">port</a></code> attribute
2052     of <var title="">worker</var>.
2053 wakaba 1.25
2054 wakaba 1.36 </span><li>
2055     <p class="no-ja-translation" data-ja-hash="5aec0369bd40bfd0f0ff2dc70f75b9f5"><span class=en-original lang=en>If there exists a <code><a
2056 wakaba 1.29 href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
2057     object whose <a href="#closing"
2058     title=dom-WorkerGlobalScope-closing>closing</a> flag is false, whose
2059     <code title=dom-WorkerGlobalScope-name>name</code> attribute is
2060     exactly equal to the <var title="">name</var> argument, and whose
2061     <code title=dom-WorkerGlobalScope-location><a
2062     href="#location">location</a></code> attribute represents an
2063     <span>absolute URL</span> that has the <span>same origin</span> as the
2064 wakaba 1.36 resulting <span>absolute URL</span>, then run these substeps:</span></p>
2065 wakaba 1.25
2066 wakaba 1.29 <ol>
2067     <li>
2068 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
2069 wakaba 1.29 href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
2070     object.
2071    
2072 wakaba 1.36 </span><li>
2073     <p class="no-ja-translation" data-ja-hash="7b6f8fa4ae92ed20dd16a2fb90c3e618"><span class=en-original lang=en>If <var title="">worker global scope</var>'s <code
2074 wakaba 1.29 title=dom-WorkerGlobalScope-location><a
2075     href="#location">location</a></code> attribute represents an
2076     <span>absolute URL</span> that is not exactly equal to the resulting
2077     <span>absolute URL</span>, then throw a
2078     <code>URL_MISMATCH_ERR</code> exception and abort all these steps.
2079     <span class=big-issue>code 21</span>
2080    
2081 wakaba 1.36 </span><li>
2082     <p class="has-ja-translation" data-ja-hash="9c4f87efaa1e868cd6bf63dbffa749c0"><span class=en-original lang=en>Associate <var title="">worker</var> with <var title="">worker
2083 wakaba 1.29 global scope</var>.
2084    
2085 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を <var title="">worker
2086     global scope</var> に関連付けます。</span><li>
2087 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="bab9c8cea075e0f3614c731f09b49892"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by
2088 wakaba 1.29 <var title="">worker global scope</var>. Let this be the <var
2089     title="">inside port</var>.
2090    
2091 wakaba 1.46 </span><li>
2092 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
2093 wakaba 1.29 title="">inside port</var>.
2094    
2095 wakaba 1.36 </span><li>
2096     <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
2097 wakaba 1.29 asynchronously.
2098    
2099 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を返し、
2100     次の段階を非同期に実行します。</span><li>
2101 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="59d27c5ea77ba33df367bcf4df580a15"><span class=en-original lang=en>Create an event that uses the <code>MessageEvent</code> interface,
2102 wakaba 1.29 with the name <code title=event-connect>connect</code>, which does
2103     not bubble, is cancelable, has no default action, has a <code
2104     title=dom-MessageEvent-data>data</code> attribute whose value is the
2105     empty string and has a <code
2106     title=dom-MessageEvent-messagePort>messagePort</code> attribute
2107 wakaba 1.46 whose value is the newly created port, and <span>queue a task</span>
2108     to dispatch the event at <var title="">worker global scope</var>.
2109 wakaba 1.29
2110 wakaba 1.36 </span><li>
2111     <p class="has-ja-translation" data-ja-hash="dd866391287c967d4799df78a7249911"><span class=en-original lang=en>Abort all these steps.
2112     </span><span class=ja-translation lang=ja>これらの段階をすべて停止します。</span></ol>
2113 wakaba 1.11
2114 wakaba 1.29 <li>
2115 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="3431d32f7d58431abbb9fd0e6f63d6a1"><span class=en-original lang=en><span>Create a new <code><a
2116 wakaba 1.29 href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code>
2117 wakaba 1.46 object</span>. Let <var title="">worker global scope</var> be this new
2118     object.
2119 wakaba 1.11
2120 wakaba 1.36 </span><li>
2121     <p class="has-ja-translation" data-ja-hash="9c4f87efaa1e868cd6bf63dbffa749c0"><span class=en-original lang=en>Associate <var title="">worker</var> with <var title="">worker
2122 wakaba 1.29 global scope</var>.
2123 wakaba 1.23
2124 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を <var title="">worker
2125     global scope</var> に関連付けます。</span><li>
2126 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="c285d8b77f24f839bfaaa69b872159c8"><span class=en-original lang=en>Set the <code title=dom-SharedWorkerGlobalScope-name><a
2127 wakaba 1.29 href="#name">name</a></code> attribute of <var title="">worker global
2128 wakaba 1.46 scope</var> to <var title="">name</var>.
2129 wakaba 1.11
2130 wakaba 1.36 </span><li>
2131 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="2d1b035dbaad3feca57eb124d161b034"><span class=en-original lang=en><span>Create a <code>MessagePort</code> object</span> owned by <var
2132     title="">worker global scope</var>. Let <var title="">inside
2133     port</var> be this new object.
2134 wakaba 1.11
2135 wakaba 1.46 </span><li>
2136 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
2137 wakaba 1.29 title="">inside port</var>.
2138 wakaba 1.36 </span></ol>
2139 wakaba 1.13
2140     <li>
2141 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
2142 wakaba 1.29 asynchronously.
2143 wakaba 1.25
2144 wakaba 1.36 </span><span class=ja-translation lang=ja><var title="">worker</var> を返し、
2145     次の段階を非同期に実行します。</span><li>
2146 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="59d27c5ea77ba33df367bcf4df580a15"><span class=en-original lang=en>Create an event that uses the <code>MessageEvent</code> interface,
2147 wakaba 1.22 with the name <code title=event-connect>connect</code>, which does not
2148     bubble, is cancelable, has no default action, has a <code
2149     title=dom-MessageEvent-data>data</code> attribute whose value is the
2150     empty string and has a <code
2151     title=dom-MessageEvent-messagePort>messagePort</code> attribute whose
2152 wakaba 1.46 value is the newly created port, and <span>queue a task</span> to
2153     dispatch the event at <var title="">worker global scope</var>.
2154 wakaba 1.23
2155 wakaba 1.36 </span><li>
2156 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="13490b80df7f929a817aaedc342318df"><span class=en-original lang=en><a href="#run-a">Run a worker</a> for the resulting <span>absolute
2157     URL</span>, with the <span>script browsing context</span> of the script
2158     that invoked the method as the <var title="">owner browsing
2159     context</var>, and with <var title="">worker global scope</var> as the
2160     global scope.</span></p>
2161 wakaba 1.22 </ol>
2162 wakaba 1.15
2163 wakaba 1.50 <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>
2164     <!-- the XXX below is for collapsing this interface onto WorkerGlobalScope so it looks like just one interface - the inheritance is a spec fiction only -->
2165 wakaba 1.15
2166 wakaba 1.22 <pre
2167 wakaba 1.50 class="idl no-ja-translation" data-ja-hash="de67fcab71c76bc7696cdd5e898a653e"><span class=en-original lang=en>[NoInterfaceObject, ImplementedOn=WorkerGlobalScope, XXX] interface <dfn id=workerutils>WorkerUtils</dfn> {
2168 wakaba 1.25 void <a href="#importscripts" title=dom-WorkerGlobalScope-importScripts>importScripts</a>([Variadic] in DOMString urls);
2169 wakaba 1.22 readonly attribute <span>Storage</span> <a href="#localstorage" title=dom-localStorage>localStorage</a>;
2170 wakaba 1.42 readonly attribute <a href="#navigator0">Navigator</a> <a href="#navigator" title=dom-navigator>navigator</a>;
2171 wakaba 1.50 <span>Database</span> <a href="#opendatabase" title=dom-opendatabase>openDatabase</a>(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize);<!--
2172     void <span title="dom-showNotification">showNotification</span>(in DOMString title, in DOMString subtitle, in DOMString description, [Optional] in VoidCallback onclick); XXX-NOTIFY -->
2173 wakaba 1.36 };</span></pre>
2174 wakaba 1.16
2175 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
2176 wakaba 1.32 href="#workerglobalscope">WorkerGlobalScope</a></code> interface must also
2177     implement the <code><a href="#workerutils">WorkerUtils</a></code>
2178     interface.
2179    
2180 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
2181     href="#workerutils">WorkerUtils</a></code> interface must also implement
2182     the <code>WindowTimers</code> interface. (This interface provides the
2183     <code title="">setTimeout()</code> method and its friends.)
2184 wakaba 1.16
2185 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>
2186 wakaba 1.16 <!-- XXX ApplicationCache -->
2187     <!-- XXX a way to set cookies on the URL for the script -->
2188     <!-- XXX debugging: void log(in DOMString s); // log to console -->
2189     <!-- XXX debugging: onerror -->
2190    
2191     <hr>
2192    
2193 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,
2194 wakaba 1.32 etc) are not available to workers in this version of this specification.
2195    
2196     </span><span class=ja-translation lang=ja>DOM API (<code>Node</code> オブジェクト、 <code>Document</code>
2197 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
2198     libraries</span><span class=ja-translation lang=ja><span class=secno>3.1 </span>スクリプトとライブラリーの輸入</span></h3>
2199 wakaba 1.22
2200 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
2201 wakaba 1.25 title=dom-WorkerGlobalScope-importScripts><code>importScripts(<var
2202     title="">urls</var>)</code></dfn> method on a <code><a
2203 wakaba 1.22 href="#workerglobalscope">WorkerGlobalScope</a></code> object, the user
2204     agent must run the following steps:
2205    
2206 wakaba 1.36 </span><ol>
2207 wakaba 1.22 <li>
2208 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
2209 wakaba 1.25 steps.
2210    
2211 wakaba 1.36 </span><span class=ja-translation lang=ja>引数がない場合、何も返さずに返ります。
2212     これらの段階を停止します。</span><li>
2213     <p class="has-ja-translation" data-ja-hash="b89818b453add85fbb5ec1e963e3072c"><span class=en-original lang=en><span title="resolve a url">Resolve</span> each argument.
2214 wakaba 1.22
2215 wakaba 1.36 </span><span class=ja-translation lang=ja>各引数を<span title="resolve a url">解決</span>します。</span><li>
2216     <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.
2217 wakaba 1.45 </span><span class=ja-translation lang=ja>いずれかが失敗した場合、 <code>SYNTAX_ERR</code> 例外を投げます。</span></li>
2218     <!--
2219     <li><p class="has-ja-translation" data-ja-hash="952d7bd44378695378ddf1084a1c5347"><span class=en-original lang=en>If any of the resulting <span title="absolute URL">absolute
2220     URLs</span> have an <span>origin</span> that is not the <span
2221     title="same origin">same</span> as the origin of the script that
2222     invoked the method, then throw a <span>security
2223     exception</span>.</span><span class=ja-translation lang=ja>結果として得られた<span title="absolute URL">絶対
2224 wakaba 1.36 URL</span>
2225     のいずれかが、メソッドを呼び出したスクリプトの<span>origin</span>と<span
2226     title="same origin">同じ</span>ではない起源を持つ場合、
2227 wakaba 1.45 <span>保安性例外</span>を投げます。</span></p></li>
2228     -->
2229 wakaba 1.42
2230     <li>
2231 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
2232     resulting <span title="absolute URLs">absolute URL</span>.</span><span class=ja-translation lang=ja>結果として得られた<span title="absolute URLs">絶対 URL</span>
2233     によって識別される資源をそれぞれ<span>取得</span>しようと試みます。</span></p>
2234 wakaba 1.22
2235     <li>
2236 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
2237     one, run these substeps:</span><span class=ja-translation lang=ja>各引数について、与えられた順に最初のものから、次の部分段階群を走らせます。</span></p>
2238 wakaba 1.25
2239     <ol>
2240     <li>
2241 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
2242     complete.</span><span class=ja-translation lang=ja>対応する資源を取得しようとする試みが完了するのを待ちます。</span></p>
2243 wakaba 1.25
2244 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="c821b5a32a4316df06e95e2117d4d21a"><span class=en-original lang=en>If the fetching attempt failed, throw a <code>NETWORK_ERR</code>
2245     exception and abort all these steps.</span></p>
2246    
2247     <p class="no-ja-translation" data-ja-hash="d6801f59b2563b0c5b83889b85620faa"><span class=en-original lang=en>If the fetching attempt succeeded, then let <var
2248     title="">source</var> be the text of the resource that was obtained,
2249     and let <var title="">language</var> be JavaScript.</span></p>
2250 wakaba 1.36
2251     <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
2252     assumed to be JavaScript, regardless of the MIME type.</span><span class=ja-translation lang=ja>労働者のスクリプトと同じく、ここでのスクリプトも、 MIME 型に関わらず常に
2253     JavaScript であるとみなします。</span></p>
2254 wakaba 1.25 <!-- XXX -->
2255    
2256     <li>
2257 wakaba 1.46 <p class="no-ja-translation" data-ja-hash="cf414ab741fec06cd9788dadd0849790"><span class=en-original lang=en><span>Create a script</span>, using <var title="">source</var> as
2258     the script source and <var title="">language</var> as the scripting
2259     language, using the same global object, browsing context, character
2260     encoding, base URL, and script group as the <span
2261     title=concept-script>script</span> that was created by the worker's <a
2262     href="#run-a">run a worker</a> algorithm.</span></p>
2263    
2264     <p class="no-ja-translation" data-ja-hash="c33e5168b4feb73106bd20c058fe035e"><span class=en-original lang=en>Let the newly created <span title=concept-script>script</span> run
2265     until it either returns, fails to parse, fails to catch an exception,
2266     or gets prematurely aborted by the "<a href="#kill-a">kill a
2267     worker</a>" or "<a href="#terminate">terminate a worker</a>"
2268     algorithms defined above.</span></p>
2269 wakaba 1.42
2270     <p class="no-ja-translation" data-ja-hash="41014f4a697396a3e02475a4d61a7472"><span class=en-original lang=en>If it failed to parse, then throw a
2271     <code>SyntaxError</code><!-- XXX ref? --> exception and abort all
2272     these steps.</span></p>
2273 wakaba 1.25
2274 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,
2275 wakaba 1.25 then abort all these steps, letting the exception or aborting continue
2276     to be processed by the script that called the <code
2277     title=dom-WorkerGlobalScope-importScripts><a
2278 wakaba 1.36 href="#importscripts">importScripts()</a></code> method.</span></p>
2279 wakaba 1.22
2280 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
2281     href="#terminate">terminate a worker</a>" algorithms abort the script
2282 wakaba 1.36 then abort all these steps.</span></p>
2283 wakaba 1.25 </ol>
2284 wakaba 1.22 </ol>
2285    
2286 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
2287     href="#navigator0">Navigator</a></code> object</span></h3>
2288    
2289     <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>
2290     attribute of the <code><a href="#workerutils">WorkerUtils</a></code>
2291     interface must return an instance of the <code><a
2292     href="#navigator0">Navigator</a></code> interface, which represents the
2293     identity and state of the user agent (the client):
2294    
2295 wakaba 1.50 </span><pre class="idl no-ja-translation" data-ja-hash="acb6d94ad25eb722cedfe999a7579982"><span class=en-original lang=en>interface <dfn id=navigator0>Navigator</dfn> {
2296 wakaba 1.42 // objects implementing this interface also implement the interfaces listed below
2297     };</span></pre>
2298    
2299     <p class="no-ja-translation" data-ja-hash="cc1c14039bdbf516ffffc18ed475544f"><span class=en-original lang=en>Objects implementing the <code><a
2300     href="#navigator0">Navigator</a></code> interface must also implement the
2301     <span>NavigatorID</span> and <span>NavigatorOnLine</span> interfaces
2302     specified in the HTML5 specification. <a href="#refsHTML5">[HTML5]</a>
2303    
2304     </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>
2305     interface defined in this specification is different than the one defined
2306     in the HTML5 specification.
2307    
2308     </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
2309     specifications</span><span class=ja-translation lang=ja><span class=secno>3.3 </span>他の仕様書で定義されている API</span></h3>
2310 wakaba 1.22
2311 wakaba 1.36 <p class="no-ja-translation" data-ja-hash="3c9a0dcc3dbfc7283eea34202de4d321"><span class=en-original lang=en>The <dfn id=localstorage
2312 wakaba 1.22 title=dom-localStorage><code>localStorage</code></dfn>, <dfn
2313     id=opendatabase title=dom-opendatabase><code>openDatabase()</code></dfn>
2314     must act as defined for the APIs with the same names on the
2315     <code>Window</code> object in the HTML5 specification, with the exception
2316     that where the API would use the <span>origin</span> of the <span>active
2317     document</span> of the <span>browsing context</span> of the
2318     <code>Window</code> object on which the method was supposedly invoked, it
2319     must instead use the <span>origin</span> of the script that invoked the
2320     method. <a href="#refsHTML5">[HTML5]</a>
2321    
2322 wakaba 1.36 </span><p class="no-ja-translation" data-ja-hash="6563db877bfe3b57772fed7dedbfc84b"><span class=en-original lang=en>The <dfn id=shownotification
2323 wakaba 1.22 title=dom-showNotification><code>showNotification()</code></dfn> methods
2324     must act as defined for the APIs with the same names on the
2325     <code>Window</code> object in the HTML5 specification. <a
2326     href="#refsHTML5">[HTML5]</a>
2327    
2328 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
2329     constructors</span><span class=ja-translation lang=ja><span class=secno>3.4 </span>界面オブジェクトと構築器</span></h3>
2330 wakaba 1.22
2331 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
2332 wakaba 1.22 global scope of scripts whose <span>script execution context</span> is a
2333     <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object
2334     except for the following:
2335    
2336 wakaba 1.36 </span><ul>
2337 wakaba 1.22 <li>
2338 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
2339 wakaba 1.31 defined by the XMLHttpRequest specifications, except that the
2340     <span>document response entity body</span> must always be null. <a
2341     href="#refsXHR">[XHR]</a>
2342    
2343 wakaba 1.36 </span><li>
2344     <p class="has-ja-translation" data-ja-hash="3a205f7812c3029dcecfcbbd61199f90"><span class=en-original lang=en>The <code>WebSocket</code> interface object and constructor.
2345 wakaba 1.23
2346 wakaba 1.32 </span><span class=ja-translation lang=ja><code>WebSocket</code> 界面オブジェクトと構築器</span><li>
2347 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.
2348 wakaba 1.32
2349 wakaba 1.42 </span><span class=ja-translation lang=ja><code>MessageChannel</code> 界面オブジェクトと構築器</span><li>
2350     <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
2351     <code title=dom-SharedWorker><a href="#sharedworker0">SharedWorker(<var
2352     title="">url</var>)</a></code> constructors.
2353     </span></ul>
2354    
2355     <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>
2356 wakaba 1.23
2357 wakaba 1.50 <pre class="idl no-ja-translation" data-ja-hash="235fe0311fd11c41ec8ff0242ac64521"><span class=en-original lang=en>interface <dfn id=workerlocation>WorkerLocation</dfn> {
2358 wakaba 1.23 readonly attribute DOMString <a href="#href" title=dom-WorkerLocation-href>href</a>;
2359     readonly attribute DOMString <a href="#protocol" title=dom-WorkerLocation-protocol>protocol</a>;
2360     readonly attribute DOMString <a href="#host" title=dom-WorkerLocation-host>host</a>;
2361     readonly attribute DOMString <a href="#hostname" title=dom-WorkerLocation-hostname>hostname</a>;
2362 wakaba 1.29 readonly attribute DOMString <a href="#port0" title=dom-WorkerLocation-port>port</a>;
2363 wakaba 1.23 readonly attribute DOMString <a href="#pathname" title=dom-WorkerLocation-pathname>pathname</a>;
2364     readonly attribute DOMString <a href="#search" title=dom-WorkerLocation-search>search</a>;
2365     readonly attribute DOMString <a href="#hash" title=dom-WorkerLocation-hash>hash</a>;
2366 wakaba 1.36 };</span></pre>
2367 wakaba 1.23
2368 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
2369 wakaba 1.23 represents an <span>absolute URL</span> set at its creation.
2370    
2371 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>
2372 wakaba 1.23 attribute must return the <span>absolute URL</span> that the object
2373     represents.
2374    
2375 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
2376 wakaba 1.23 also has the complement of <span>URL decomposition attributes</span>, <dfn
2377     id=protocol title=dom-WorkerLocation-protocol><code>protocol</code></dfn>,
2378     <dfn id=host title=dom-WorkerLocation-host><code>host</code></dfn>, <dfn
2379 wakaba 1.29 id=port0 title=dom-WorkerLocation-port><code>port</code></dfn>, <dfn
2380 wakaba 1.23 id=hostname title=dom-WorkerLocation-hostname><code>hostname</code></dfn>,
2381     <dfn id=pathname
2382     title=dom-WorkerLocation-pathname><code>pathname</code></dfn>, <dfn
2383     id=search title=dom-WorkerLocation-search><code>search</code></dfn>, and
2384     <dfn id=hash title=dom-WorkerLocation-hash><code>hash</code></dfn>. These
2385     must follow the rules given for URL decomposition attributes, with the
2386     <span title=concept-uda-input>input</span> being the <span>absolute
2387     URL</span> that the object represents (same as the <code
2388     title=dom-WorkerLocation-href><a href="#href">href</a></code> attribute),
2389     and the <span title=concept-uda-setter>common setter action</span> being a
2390     no-op, since the attributes are defined to be readonly. <a
2391     href="#refsHTML5">[HTML5]</a>
2392 wakaba 1.22
2393 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>
2394 wakaba 1.32
2395 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
2396 wakaba 1.32 draft.<!--XXX-->
2397 wakaba 1.1
2398 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>
2399 wakaba 1.1 <!-- ACKS -->
2400    
2401 wakaba 1.50 <p class="has-ja-translation" data-ja-hash="a17a0feb6f58a31040d51121e80bc233" data-ja-real-hash="652eb8d20b353fa25a4dac94db2c5839"><span class=en-original lang=en>Thanks to Aaron Boodman,
2402 wakaba 1.47 &#1040;&#1083;&#1077;&#1082;&#1089;&#1077;&#1081;
2403     &#1055;&#1088;&#1086;&#1089;&#1082;&#1091;&#1088;&#1103;&#1082;&#1086;&#1074;
2404 wakaba 1.50 (Alexey Proskuryakov), Anne van Kesteren, Ben Turner, Dmitry Titov, Jonas
2405     Sicking, Justin James, Kevin Hakanson, Maciej Stachowiak, Michael Nordman,
2406     Mike Smith, and Philip Taylor for their useful and substantial comments.
2407 wakaba 1.32
2408 wakaba 1.50 </span><span class=ja-translation lang=ja>Aaron Boodman, &#1040;&#1083;&#1077;&#1082;&#1089;&#1077;&#1081; &#1055;&#1088;&#1086;&#1089;&#1082;&#1091;&#1088;&#1103;&#1082;&#1086;&#1074; (Alexey Proskuryakov), Anne van Kesteren, Ben Turner, Dmitry Titov, 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
2409 wakaba 1.32 whose experience has been a huge influence on this specification.
2410     </span><span class=ja-translation lang=ja>Gears チームの方々にも非常に感謝します。
2411 wakaba 1.14 Gears チームの方々はこの技術を開拓し、その経験はこの仕様書にも多大な影響を与えています。
2412     </span>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24