diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/ja/web/api/sharedworker | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/ja/web/api/sharedworker')
-rw-r--r-- | files/ja/web/api/sharedworker/index.html | 107 | ||||
-rw-r--r-- | files/ja/web/api/sharedworker/port/index.html | 61 |
2 files changed, 168 insertions, 0 deletions
diff --git a/files/ja/web/api/sharedworker/index.html b/files/ja/web/api/sharedworker/index.html new file mode 100644 index 0000000000..9e504bc155 --- /dev/null +++ b/files/ja/web/api/sharedworker/index.html @@ -0,0 +1,107 @@ +--- +title: SharedWorker +slug: Web/API/SharedWorker +translation_of: Web/API/SharedWorker +--- +<div>{{APIRef("Web Workers API")}}</div> + +<p><code><strong>SharedWorker</strong></code> インターフェースは複数のブラウザコンテキストからアクセス可能な Worker を提供します。複数のブラウザコンテキストとは、複数のウィンドウや iframe、Worker などを指します。Dedicated Worker とは異なるインタフェースと、異なるグローバルスコープを持ちます。スコープに関しては {{domxref("SharedWorkerGlobalScope")}} を参照してください。</p> + +<div class="note"> +<p><strong>付記:</strong>同じオリジン、つまりプロトコル、ホスト名、ポートが全て同じ場合にのみ、SharedWorker は異なるブラウザコンテキスト間で共有されます。</p> +</div> + +<h2 id="コンストラクタ">コンストラクタ</h2> + +<dl> + <dt>{{domxref("SharedWorker.SharedWorker", "SharedWorker()")}}</dt> + <dd>指定された URL のスクリプトを実行する SharedWorker を作成します。</dd> +</dl> + +<h2 id="プロパティ">プロパティ</h2> + +<p><em>{{domxref("EventTarget")}} のプロパティを継承し、 {{domxref("AbstractWorker")}} で定義されるプロパティを実装しています。</em></p> + +<dl> + <dt>{{domxref("AbstractWorker.onerror")}}</dt> + <dd>type <code>error</code> である {{domxref("ErrorEvent")}} がバブリングした時に呼ばれる {{domxref("EventListener")}}</dd> + <dt>{{domxref("SharedWorker.port")}} {{readonlyInline}}</dt> + <dd>通信とコントロールに利用される {{domxref("MessagePort")}} オブジェクトを返します。</dd> +</dl> + +<h2 id="メソッド">メソッド</h2> + +<p><em>{{domxref("EventTarget")}} のメソッドを継承し、 {{domxref("AbstractWorker")}} に定義されるメソッドを実装します。</em></p> + +<h2 id="例">例</h2> + +<p><a class="external external-icon" href="https://github.com/mdn/simple-shared-worker">SharedWorker の基本利用例</a> (<a class="external external-icon" href="http://mdn.github.io/simple-shared-worker/">ライブデモ</a>) には 2 つの HTML ページがあり、それぞれでは JavaScript で単純な計算を行っています。それぞれのスクリプトは計算を行うために同じ JS ファイルを Worker に実行させています。2 つのページが別のウインドウで動作していたとしても、同じ Worker にアクセスできています。</p> + +<p><code>SharedWorker</code> オブジェクトは {{domxref("SharedWorker.SharedWorker", "SharedWorker()")}} コンストラクタを利用して、次のように作成します:</p> + +<pre class="brush: js">var myWorker = new SharedWorker("worker.js"); +</pre> + +<p>それぞれのスクリプトは {{domxref("MessagePort")}} オブジェクトを通じて Worker にアクセスします。このオブジェクトは {{domxref("SharedWorker.port")}} プロパティから取得できます。addEventListener を読んで onmessage イベントのハンドラを登録したら、<code>start()</code> メソッドを呼んでポートを手動で開始できます:</p> + +<pre class="brush: js">myWorker.port.start();</pre> + +<p>ポートが開始されたら、Worker に向けてメッセージを送ったり、送られたメッセージを受け取ったりできます。これらには <code>port.postMessage()</code> と <code>port.onmessage</code> を利用します:</p> + +<pre class="brush: js">first.onchange = function() { + myWorker.port.postMessage([first.value,second.value]); + console.log('Message posted to worker'); + } + + second.onchange = function() { + myWorker.port.postMessage([first.value,second.value]); + console.log('Message posted to worker'); + } + + myWorker.port.onmessage = function(e) { + result1.textContent = e.data; + console.log('Message received from worker'); + }</pre> + +<p>Worker の内部では {{domxref("SharedWorkerGlobalScope.onconnect")}} に対してハンドラを設定することで、上述したポートへの接続を処理できます。Worker に関連付けられたポートは {{event("connect")}} イベントの <code>ports</code> 属性で参照できます。{{domxref("MessagePort")}} <code>の start()</code> メソッドによるポート開始後は、<code>onmessage</code> ハンドラでメインスレッドからのメッセージを処理します。</p> + +<pre class="brush: js">onconnect = function(e) { + var port = e.ports[0]; + + port.addEventListener('message', function(e) { + var workerResult = 'Result: ' + (e.data[0] * e.data[1]); + port.postMessage(workerResult); + }); + + port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter. +}</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様</th> + <th scope="col">状況</th> + <th scope="col">コメント</th> + </tr> + <tr> + <td>{{SpecName('HTML WHATWG', "#sharedworker", "SharedWorker")}}</td> + <td>{{Spec2('HTML WHATWG')}}</td> + <td>{{SpecName("Web Workers")}} との差分なし</td> + </tr> + </tbody> +</table> + +<h2 id="ブラウザ互換性">ブラウザ互換性</h2> + + + +<p>{{Compat("api.SharedWorker")}}</p> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li>{{domxref("Worker")}}</li> + <li><a class="internal" href="/docs/Web/Guide/Performance/Using_web_workers">Web workers の利用</a></li> +</ul> diff --git a/files/ja/web/api/sharedworker/port/index.html b/files/ja/web/api/sharedworker/port/index.html new file mode 100644 index 0000000000..5afdd7fed5 --- /dev/null +++ b/files/ja/web/api/sharedworker/port/index.html @@ -0,0 +1,61 @@ +--- +title: SharedWorker.port +slug: Web/API/SharedWorker/port +tags: + - API + - Property + - Reference + - SharedWorker + - Web Workers + - port +translation_of: Web/API/SharedWorker/port +--- +<div>{{APIRef("Web Workers API")}}</div> + +<p>{{domxref("SharedWorker")}} インターフェースの <code><strong>port</strong></code> プロパティは、shared worker を制御したり通信したりするために使用する {{domxref("MessagePort")}} オブジェクトを返します。</p> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">myWorker.port;</pre> + +<h3 id="値">値</h3> + +<p>{{domxref("MessagePort")}} オブジェクト</p> + +<h2 id="例">例</h2> + +<p>次のコードスニペットでは、{{domxref("SharedWorker.SharedWorker", "SharedWorker()")}} コンストラクターを使用して <code>SharedWorker</code> オブジェクトを生成しています。<code>SharedWorker.port</code> プロパティ経由で {{domxref("MessagePort")}} オブジェクトを使用して、複数のスクリプトから worker にアクセスできます — port は <code>start()</code> メソッドを使用して開始します:</p> + +<pre class="brush: js">var myWorker = new SharedWorker('worker.js'); +myWorker.port.start();</pre> + +<p>完全なサンプルについては、<a class="external external-icon" href="https://github.com/mdn/simple-shared-worker">Basic shared worker example</a> (<a class="external external-icon" href="http://mdn.github.io/simple-shared-worker/">run shared worker</a>) を参照してください。</p> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様</th> + <th scope="col">ステータス</th> + <th scope="col">コメント</th> + </tr> + <tr> + <td>{{SpecName('HTML WHATWG', "#dom-sharedworker-port", "AbstractWorker.onerror")}}</td> + <td>{{Spec2('HTML WHATWG')}}</td> + <td> </td> + </tr> + </tbody> +</table> + +<h2 id="ブラウザー実装状況">ブラウザー実装状況</h2> + + + +<p>{{Compat("api.SharedWorker.port")}}</p> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{domxref("SharedWorker")}} インターフェース</li> +</ul> |