/[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.234 - (show annotations) (download)
Tue Jun 1 06:19:28 2010 UTC (16 years, 1 month ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.233: +5 -3 lines
make

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.24