Skip to content

Commit

Permalink
2024/03/06 時点の英語版に基づき更新
Browse files Browse the repository at this point in the history
  • Loading branch information
mfuji09 committed Aug 22, 2024
1 parent eab8b94 commit 0d9aabf
Show file tree
Hide file tree
Showing 5 changed files with 229 additions and 89 deletions.
29 changes: 15 additions & 14 deletions files/ja/web/api/messageport/close/index.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,32 @@
---
title: MessagePort.close()
title: "MessagePort: close() メソッド"
short-title: close()
slug: Web/API/MessagePort/close
l10n:
sourceCommit: e4c0939929e1b3e1fa3fd3da82b827fca3ed4c79
---

{{APIRef("HTML DOM")}}
{{APIRef("Channel Messaging API")}} {{AvailableInWorkers}}

{{domxref("MessagePort")}} インターフェイスの **`close()`** メソッドは、ポートの接続を切断し、ポートがアクティブではなくなります。これは、そのポートへのメッセージの送信を停止します。

{{AvailableInWorkers}}
**`close()`** は {{domxref("MessagePort")}} インターフェイスのメソッドで、ポートの接続を切断し、ポートがアクティブではなくなります。これは、そのポートへのメッセージの送信を停止します。

## 構文

```
port.close()
```js-nolint
close()
```

### 戻り値
### 返値

無効
なし

### 引数

なし。
なし ({{jsxref("undefined")}})

##

次のコードブロックには、`handleMessage` ハンドラ関数があり、{{domxref("EventTarget.addEventListener")}} を使用してこのドキュメントにメッセージが返された時に実行されます
次のコードブロックには、`handleMessage` ハンドラー関数があり、{{domxref("EventTarget.addEventListener")}} を使用してこの文書にメッセージが返された時に実行されます

```js
channel.port1.addEventListener("message", handleMessage, false);
Expand All @@ -43,14 +44,14 @@ channel.port1.start();
channel.port1.close();
```

## 仕様
## 仕様書

{{Specifications}}

## ブラウザの実装状況
## ブラウザーの互換性

{{Compat}}

## 関連情報

- [Using channel messaging](/ja/docs/Web/API/Channel_Messaging_API/Using_channel_messaging)
- [チャンネルメッセージングの使用](/ja/docs/Web/API/Channel_Messaging_API/Using_channel_messaging)
63 changes: 34 additions & 29 deletions files/ja/web/api/messageport/index.md
Original file line number Diff line number Diff line change
@@ -1,46 +1,50 @@
---
title: MessagePort
slug: Web/API/MessagePort
l10n:
sourceCommit: e4c0939929e1b3e1fa3fd3da82b827fca3ed4c79
---

{{APIRef("HTML DOM")}}
{{APIRef("Channel Messaging API")}} {{AvailableInWorkers}}

[Channel Messaging API](/ja/docs/Web/API/Channel_Messaging_API) **`MessagePort`** インターフェースは、{{domxref("MessageChannel")}} の 2 つのポートの一方を表し、片方のポートから送信されるメッセージをもう片方のポートで受信待機できます。
**`MessagePort`**[チャンネルメッセージング API](/ja/docs/Web/API/Channel_Messaging_API) のインターフェイスで、{{domxref("MessageChannel")}} の 2 つのポートの一方を表し、片方のポートから送信されるメッセージをもう片方のポートで受信待機できます。

{{AvailableInWorkers}}
`MessagePort`[移譲可能オブジェクト](/ja/docs/Web/API/Web_Workers_API/Transferable_objects)です。

## メソッド
{{InheritanceDiagram}}

_親である {{domxref("EventTarget")}} からのメソッドを継承します。_
## インスタンスメソッド

- {{domxref("MessagePort.postMessage")}}
- : ポートからメッセージを送信します。また、任意でオブジェクトの所有権を他のブラウジングコンテキストへ転送します。
- {{domxref("MessagePort.start")}}
- : ポート上で順番待ちのメッセージの送信を開始します。({{domxref("EventTarget.addEventListener")}} を使用する場合のみ必要です。{{domxref("MessagePort.onmessage")}} を使用する場合は暗黙に実行されます。)
- {{domxref("MessagePort.close")}}
_親である {{domxref("EventTarget")}} からの継承したメソッドがあります。_

- {{domxref("MessagePort.postMessage","postMessage()")}}
- : ポートからメッセージを送信します。また、任意でオブジェクトの所有権を他の閲覧コンテキストへ転送します。
- {{domxref("MessagePort.start","start()")}}
- : ポート上で順番待ちのメッセージの送信を開始します。({{domxref("EventTarget.addEventListener")}} を使用する場合のみ必要です。{{domxref("MessagePort.message_event", "onmessage")}} を使用する場合は暗黙に実行されます。)
- {{domxref("MessagePort.close","close()")}}
- : ポートとの接続を切断し、このポートはアクティブではなくなります。

## イベントハンドラ
## イベント

_親である {{domxref("EventTarget")}} からのイベントハンドラを継承します_
_親である {{domxref("EventTarget")}} から継承したイベントがあります_

- {{domxref("MessagePort.onmessage")}}
- : これは、`message` 型の {{domxref("MessageEvent")}} がポート上で発動した時に呼び出される {{domxref("EventListener")}} です。つまり、ポートがメッセージを受信した時に呼び出されます
- {{domxref("MessagePort.onmessageerror")}}
- : ポートで `messageerror` 型の {{domxref("MessageEvent")}} が発火すると呼び出されます。つまり、デシリアライズできないメッセージを受け取ったときです
- {{domxref("MessagePort.message_event","message")}}
- : `MessagePort` オブジェクトがメッセージを受信したときに発行されます
- {{domxref("MessagePort.messageerror_event","messageerror")}}
- : `MessagePort` オブジェクトがデシリアライズできないメッセージを受け取ったときに発行されます

##

次のコードブロックには、{{domxref("MessageChannel()", "MessageChannel.MessageChannel")}} コンストラクタで作成された新しいチャンネルがあります
次の例では、{{domxref("MessageChannel.MessageChannel","MessageChannel()")}} コンストラクターで作成された新しいチャンネルがあります

Iframe が読み込まれると、{{domxref("MessageChannel.port1")}} `onmessage` ハンドラーを登録し、メッセージと共に {{domxref("window.postMessage")}} を使用して IFrame に {{domxref("MessageChannel.port2")}} を送信します
IFrame が読み込まれると、{{domxref("MessagePort/message_event","onmessage")}} ハンドラーを {{domxref("MessageChannel.port1")}} に登録し、{{domxref("MessageChannel.port2")}} IFrame に、メッセージと共に {{domxref("window.postMessage")}} を使用して送信します

IFrame からメッセージが返却されると。`onMessage` 関数でメッセージをパラグラフに出力します
IFrame からメッセージが返却されると。`onMessage` 関数でメッセージを段落に出力します

```
var channel = new MessageChannel();
var output = document.querySelector('.output');
var iframe = document.querySelector('iframe');
```js
const channel = new MessageChannel();
const output = document.querySelector(".output");
const iframe = document.querySelector("iframe");

// Wait for the iframe to load
iframe.addEventListener("load", onLoad);
Expand All @@ -50,26 +54,27 @@ function onLoad() {
channel.port1.onmessage = onMessage;

// Transfer port2 to the iframe
iframe.contentWindow.postMessage('Hello from the main page!', '*', [channel.port2]);
iframe.contentWindow.postMessage("Hello from the main page!", "*", [
channel.port2,
]);
}

// Handle messages received on port1
function onMessage(e) {
output.innerHTML = e.data;
}
```

完全に動作する例は、Github 上の [channel messaging basic demo](https://github.com/mdn/channel-messaging-basic-demo) を参照してください ([実際のデモも実行できます](http://mdn.github.io/channel-messaging-basic-demo/))。
完全に動作する例は、Github 上の [channel messaging basic demo](https://github.com/mdn/dom-examples/tree/main/channel-messaging-basic) を参照してください ([実際のデモも実行できます](https://mdn.github.io/dom-examples/channel-messaging-basic/))。

## 仕様
## 仕様書

{{Specifications}}

## ブラウザの実装状況
## ブラウザーの互換性

{{Compat}}

## 関連情報

- [Using channel messaging](/ja/docs/Web/API/Channel_Messaging_API/Using_channel_messaging)
- [チャンネルメッセージングの使用](/ja/docs/Web/API/Channel_Messaging_API/Using_channel_messaging)
96 changes: 73 additions & 23 deletions files/ja/web/api/messageport/message_event/index.md
Original file line number Diff line number Diff line change
@@ -1,53 +1,103 @@
---
title: MessagePort.onmessage
title: "MessagePort: message イベント"
short-title: message
slug: Web/API/MessagePort/message_event
l10n:
sourceCommit: e4c0939929e1b3e1fa3fd3da82b827fca3ed4c79
---

{{APIRef("HTML DOM")}}
{{APIRef("Channel Messaging API")}} {{AvailableInWorkers}}

{{domxref("MessagePort")}} インターフェイスの **`onmessage`** イベントハンドラは、{{domxref("EventListener")}} であり、ポート上で `message` 型の {{domxref("MessageEvent")}} が発動した時に呼び出されます。つまり、ポートがメッセージを受信した時に呼び出されます
**`message`** イベントは {{domxref('MessagePort')}} オブジェクトで、チャンネル上でメッセージが届いたときに発生します

{{AvailableInWorkers}}
このイベントはキャンセル不可で、バブリングしません。

## 構文

このイベント名を {{domxref("EventTarget.addEventListener", "addEventListener()")}} のようなメソッドで使用するか、イベントハンドラープロパティを設定するかしてください。

```js
addEventListener("message", (event) => {});

onmessage = (event) => {};
```
channel.onmessage = function() { ... };
```

## イベント型

{{domxref("MessageEvent")}} です。 {{domxref("Event")}} を継承しています。

{{InheritanceDiagram("MessageEvent")}}

## イベントプロパティ

_このインターフェイスは親である {{domxref("Event")}} からプロパティを継承しています。_

- {{domxref("MessageEvent.data")}} {{ReadOnlyInline}}
- : メッセージ送信元によって送信されたデータです。
- {{domxref("MessageEvent.origin")}} {{ReadOnlyInline}}
- : 文字列で、メッセージ送信元のオリジンを表します。
- {{domxref("MessageEvent.lastEventId")}} {{ReadOnlyInline}}
- : 文字列で、このイベントの一意の ID を表します。
- {{domxref("MessageEvent.source")}} {{ReadOnlyInline}}
- : メッセージイベントソース、すなわち {{glossary("WindowProxy")}}、{{domxref("MessagePort")}}、{{domxref("ServiceWorker")}} の何れかのオブジェクトで、メッセージの送信元を表します。
- {{domxref("MessageEvent.ports")}} {{ReadOnlyInline}}
- : {{domxref("MessagePort")}} オブジェクトの配列で、メッセージが送信されるチャンネルに関連するポートを表します(チャンネルメッセージングや、共有ワーカーにメッセージを送信する場合など、適切な場合)。

##

次のコードブロックには、{{domxref("MessageChannel()", "MessageChannel.MessageChannel")}} コンストラクタで作成された新しいチャンネルがあります。IFrame が読み込まれた時、{{domxref("MessagePort.postMessage")}} を使用してメッセージと {{domxref("MessageChannel.port2")}} が IFrame へ渡されます。すると、`handleMessage` ハンドラが `onmessage` によって IFrame から返されたメッセージに応答し、そのメッセージを段落に出力します。ここで、{{domxref("MessageChannel.port1")}} は、メッセージが到着したときに確認するための待機状態にあります
[`MessageChannel`](/ja/docs/Web/API/MessageChannel) を作成し、そのポートの 1 つを別の閲覧コンテキスト(別の [`<iframe>`](/ja/docs/Web/HTML/Element/iframe) など)に送信するスクリプトを、次のようなコードで作成するとします

```js
var channel = new MessageChannel();
var para = document.querySelector("p");
const channel = new MessageChannel();
const myPort = channel.port1;
const targetFrame = window.top.frames[1];
const targetOrigin = "https://example.org";

var ifr = document.querySelector("iframe");
var otherWindow = ifr.contentWindow;
const messageControl = document.querySelector("#message");
const channelMessageButton = document.querySelector("#channel-message");

ifr.addEventListener("load", iframeLoaded, false);
channelMessageButton.addEventListener("click", () => {
myPort.postMessage(messageControl.value);
});

function iframeLoaded() {
otherWindow.postMessage("Hello from the main page!", "*", [channel.port2]);
}
targetFrame.postMessage("init", targetOrigin, [channel.port2]);
```

対象とするポートを受信し、そのポートでメッセージの待ち受けを開始するには、次のようなコードを使用することができます。

```js
window.addEventListener("message", (event) => {
const myPort = event.ports[0];

myPort.addEventListener("message", (event) => {
received.textContent = event.data;
});

channel.port1.onmessage = handleMessage;
function handleMessage(e) {
para.innerHTML = e.data;
}
myPort.start();
});
```

完全に動作する例は、Github 上の [チャンネルメッセージ送信の基本デモ](https://github.com/mdn/channel-messaging-basic-demo) を見てください ([実際の動作も確認できます](http://mdn.github.io/channel-messaging-basic-demo/))。
リスナーが [`MessagePort.start()`](/ja/docs/Web/API/MessagePort/start) を呼び出さなければ、このポートにメッセージが配信されないことに注意してください。これは、[`addEventListener()`](/ja/docs/Web/API/EventTarget/addEventListener) メソッドを使用する場合のみ必要です。受信者が `onmessage` を使用する場合は、`start()` が暗黙的に呼び出されます。

```js
window.addEventListener("message", (event) => {
const myPort = event.ports[0];

myPort.onmessage = (event) => {
received.textContent = event.data;
};
});
```

## 仕様
## 仕様書

{{Specifications}}

## ブラウザの実装状況
## ブラウザーの互換性

{{Compat}}

## 関連情報

- [Using channel messaging](/ja/docs/Web/API/Channel_Messaging_API/Using_channel_messaging)
- 関連イベント: [`messageerror`](/ja/docs/Web/API/MessagePort/messageerror_event)
- [チャンネルメッセージングの使用](/ja/docs/Web/API/Channel_Messaging_API/Using_channel_messaging)
Loading

0 comments on commit 0d9aabf

Please sign in to comment.