From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../ja/web/api/messageport/postmessage/index.html | 156 +++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 files/ja/web/api/messageport/postmessage/index.html (limited to 'files/ja/web/api/messageport/postmessage') diff --git a/files/ja/web/api/messageport/postmessage/index.html b/files/ja/web/api/messageport/postmessage/index.html new file mode 100644 index 0000000000..f9e092b551 --- /dev/null +++ b/files/ja/web/api/messageport/postmessage/index.html @@ -0,0 +1,156 @@ +--- +title: MessagePort.postMessage() +slug: Web/API/MessagePort/postMessage +tags: + - API + - Channel messagging + - MessagePort + - Reference + - postMessage +translation_of: Web/API/MessagePort/postMessage +--- +

{{APIRef("HTML DOM")}}

+ +

{{domxref("MessagePort")}} インターフェイスの postMessage() メソッドは、ポートからのメッセージを送信します。任意で、オブジェクトの所有権を他のブラウザコンテキストへ転送します。

+ +

{{AvailableInWorkers}}

+ +

構文

+ +
port.postMessage(message [,transfer]);
+ +

戻り値

+ +

無効。

+ +

引数

+ +
+
message
+
チャンネル経由で送信するメッセージ。これは基本データタイプになります。複数のデータアイテムを配列として送信できます。
+
[, transfer]
+
(任意) 転送されるオブジェクト。これらのオブジェクトの所有権は、受信側のブラウザコンテキストへ転送されるため、送信側のブラウザコンテキストでは使用できなくなります。
+
+ +

+ +

次のコードブロックでは、{{domxref("MessageChannel()", "MessageChannel.MessageChannel")}} コンストラクタで新しいチャンネルを作成しています。IFrame が読み込まれた時、{{domxref("window.postMessage")}} メソッドによってメッセージと {{domxref("MessageChannel.port2")}} が IFrame へ渡されます。すると、handleMessageonmessage によって IFrame から返されたメッセージに応答し、そのメッセージを段落に出力します。ここで、{{domxref("MessageChannel.port1")}} は、メッセージが到着したときに確認するための待機状態にあります。

+ +
var channel = new MessageChannel();
+var para = document.querySelector('p');
+
+var ifr = document.querySelector('iframe');
+var otherWindow = ifr.contentWindow;
+
+ifr.addEventListener("load", iframeLoaded, false);
+
+function iframeLoaded() {
+  otherWindow.postMessage('Hello from the main page!', '*', [channel.port2]);
+}
+
+channel.port1.onmessage = handleMessage;
+function handleMessage(e) {
+  para.innerHTML = e.data;
+}   
+ +

完全に動作する例は、Github 上の チャンネルメッセージ送信の基本デモ を見てください (実際の動作も確認できます)。

+ +

仕様

+ + + + + + + + + + + + + + + + + + + +
仕様書策定状況備考
{{SpecName('HTML WHATWG', '#dom-messageport-postmessage','postMessage()')}}{{Spec2('HTML WHATWG')}}{{SpecName("HTML5 Web Messaging")}} との差異なし。
{{SpecName('HTML5 Web Messaging', '#dom-messageport-postmessage','postMessage()')}}{{Spec2('HTML5 Web Messaging')}}仕様の W3C バージョン。
+ +

ブラウザの実装状況

+ +
{{CompatibilityTable}}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
機能ChromeFirefox (Gecko)Internet ExplorerOperaSafari (WebKit)
基本サポート4{{CompatNo}}10.010.65
Worker 内で利用可能{{CompatVersionUnknown}}{{CompatGeckoDesktop(41)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
機能AndroidChrome for AndroidFirefox Mobile (Gecko)Firefox OS (Gecko)IE PhoneOpera MobileSafari Mobile
基本サポート4.44{{CompatNo}}{{CompatNo}}10.011.55.1
Worker 内で利用可能{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatGeckoMobile(41)}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}
+
+ +

関連情報

+ + -- cgit v1.2.3-54-g00ecf