MessagePort
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´9æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
ã¡ã¢: ãã®æ©è½ã¯ã¦ã§ãã¯ã¼ã«ã¼å ã§å©ç¨å¯è½ã§ãã
MessagePort ã¯ãã£ã³ãã«ã¡ãã»ã¼ã¸ã³ã° API ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ãMessageChannel ã® 2 ã¤ã®ãã¼ãã®ä¸æ¹ã表ããçæ¹ã®ãã¼ãããéä¿¡ãããã¡ãã»ã¼ã¸ãããçæ¹ã®ãã¼ãã§åä¿¡å¾
æ©ã§ãã¾ãã
MessagePort ã¯ç§»è²å¯è½ãªãã¸ã§ã¯ãã§ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
親ã§ãã EventTarget ããã®ç¶æ¿ããã¡ã½ãããããã¾ãã
postMessage()-
ãã¼ãããã¡ãã»ã¼ã¸ãéä¿¡ãã¾ããã¾ããä»»æã§ãªãã¸ã§ã¯ãã®æææ¨©ãä»ã®é²è¦§ã³ã³ããã¹ãã¸è»¢éãã¾ãã
start()-
ãã¼ãä¸ã§é çªå¾ ã¡ã®ã¡ãã»ã¼ã¸ã®éä¿¡ãéå§ãã¾ãã(
EventTarget.addEventListenerã使ç¨ããå ´åã®ã¿å¿ è¦ã§ããonmessageã使ç¨ããå ´åã¯æé»ã«å®è¡ããã¾ãã) close()-
ãã¼ãã¨ã®æ¥ç¶ãåæãããã®ãã¼ãã¯ã¢ã¯ãã£ãã§ã¯ãªããªãã¾ãã
ã¤ãã³ã
親ã§ãã EventTarget ããç¶æ¿ããã¤ãã³ããããã¾ãã
message-
MessagePortãªãã¸ã§ã¯ããã¡ãã»ã¼ã¸ãåä¿¡ããã¨ãã«çºè¡ããã¾ãã messageerror-
MessagePortãªãã¸ã§ã¯ãããã·ãªã¢ã©ã¤ãºã§ããªãã¡ãã»ã¼ã¸ãåãåã£ãã¨ãã«çºè¡ããã¾ãã
ä¾
次ã®ä¾ã§ã¯ãMessageChannel() ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ä½æãããæ°ãããã£ã³ãã«ãããã¾ãã
IFrame ãèªã¿è¾¼ã¾ããã¨ãonmessage ãã³ãã©ã¼ã MessageChannel.port1 ã«ç»é²ããMessageChannel.port2 ã IFrame ã«ãã¡ãã»ã¼ã¸ã¨å
±ã« window.postMessage ã使ç¨ãã¦éä¿¡ãã¾ãã
IFrame ããã¡ãã»ã¼ã¸ãè¿å´ãããã¨ãonMessage 颿°ã§ã¡ãã»ã¼ã¸ã段è½ã«åºåãã¾ãã
const channel = new MessageChannel();
const output = document.querySelector(".output");
const iframe = document.querySelector("iframe");
// Wait for the iframe to load
iframe.addEventListener("load", onLoad);
function onLoad() {
// Listen for messages on port1
channel.port1.onmessage = onMessage;
// Transfer port2 to the iframe
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 ãåç §ãã¦ãã ãã (å®éã®ãã¢ãå®è¡ã§ãã¾ã)ã
仿§æ¸
| 仿§æ¸ |
|---|
| HTML > # message-ports > |