postMessageを使用したいくつかの方法:
postMessage関数は異なるウィンドウ間で通信するメソッドで、ウィンドウ間でメッセージを渡すことができます。使い方はいろいろあります。
- 一方通行による通信: メッセージ送信にはあるウィンドウで postMessage 関数を呼び出し、もう一方のウィンドウでは message イベントをリッスンすることでメッセージを受信します。コードの例を以下に示します。
メッセージを送信するウィンドウ
window.postMessage('Hello', 'https://example.com');
メッセージを受信するためのウィンドウです。
window.addEventListener('message', function(event) {
if (event.origin === 'https://example.com') {
console.log(event.data); // 输出: Hello
}
});
- 双方向への通信:2 つのウィンドウ間で通信チャネルを構築し、そこでメッセージを双方向に送信できます。例を下記に示します。
ウィンドウ1:
var channel = new MessageChannel();
var iframe = document.querySelector('iframe');
iframe.contentWindow.postMessage('Hello', '*', [channel.port1]);
channel.port2.addEventListener('message', function(event) {
console.log(event.data); // 输出: World
});
channel.port2.start();
iframe の src が同ドメインのページのウィンドウ 2::
window.addEventListener('message', function(event) {
if (event.source === iframe.contentWindow) {
event.ports[0].postMessage('World');
}
});
- 同一ウィンドウ内の異なるコンテキスト間で通信:同一ウィンドウ内の異なるコンテキスト間では postMessage 関数を使用して通信できます。以下にサンプルコードを示します。
同一オリジンでないiframeとメインウィンドウ(ウィンドウ1)のスクリプト
window.addEventListener('message', function(event) {
if (event.origin === 'https://example.com') {
console.log(event.data); // 输出: Hello
}
});
var iframe = document.querySelector('iframe');
iframe.contentWindow.postMessage('Hello', 'https://example.com');
ウィンドウ2(iframe内スクリプト):
window.parent.postMessage('Hello', '*');
これらはpostMessageの一般的な使用法であり、実際のニーズに応じて適切な方法を選択して通信することができます。