ãã£ã³ãã«ã¡ãã»ã¼ã¸ã³ã° API (Channel Messaging API) ã使ç¨ããã¨ãåãææ¸ã«æ·»ä»ãããç°ãªãé²è¦§ã³ã³ããã¹ãã§å®è¡ããã 2 ã¤ã®å¥ã
ã®ã¹ã¯ãªããï¼2 ã¤ã® IFrameãã¡ã¤ã³ææ¸ã¨ IFrameãSharedWorker
ãä»ãã 2 ã¤ã®ææ¸ãªã©ï¼ã§ç´æ¥éä¿¡ãã両端ã«ãã¼ããæã¤åæ¹åãã£ã³ãã«ï¼ã¾ãã¯ãã¤ãï¼ãä»ãã¦ç¸äºã«ã¡ãã»ã¼ã¸ãããåããããã¨ãã§ãã¾ãã
ãã®è¨äºã§ã¯ããã®ãã¯ããã¸ã¼ã使ç¨ããããã®åºæ¬ãæ¢ãã¾ãã
ã¡ã¢: ãã®æ©è½ã¯ã¦ã§ãã¯ã¼ã«ã¼å ã§å©ç¨å¯è½ã§ãã
ç¨éãã£ã³ãã«ã¡ãã»ã¼ã¸ã³ã°ã¯ãã²ã¼ã ãã¢ãã¬ã¹å¸³ãã¾ãã¯é³æ¥½ãå人ç¨ã«é¸æãããªã¼ãã£ãªãã¬ã¼ã¤ã¼ãªã©ãIFrame ãä»ãã¦ä»ã®ãµã¤ãã®æ©è½ãã¡ã¤ã³ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«åãè¾¼ãã½ã¼ã·ã£ã«ãµã¤ããããå ´åã«ä¸»ã«å½¹ç«ã¡ã¾ãã ããããç¬ç«ããã¦ãããã¨ãã¦æ©è½ããå ´åã¯åé¡ããã¾ããããã¡ã¤ã³ãµã¤ã㨠IFrameãã¾ãã¯ç°ãªã IFrame ã¨ã®éã®ããåããå¿ è¦ãªå ´åã¯å°é£ã«ãªãã¾ãã ä¾ãã°ãã¡ã¤ã³ãµã¤ãããã¢ãã¬ã¹å¸³ã«é£çµ¡å ã追å ããããã¡ã¤ã³ãããã¡ã¤ã«ã«ã²ã¼ã ã®ãã¤ã¹ã³ã¢ã追å ãããããªã¼ãã£ãªãã¬ã¼ã¤ã¼ããã²ã¼ã ã«æ°ãã BGM ã®é¸æè¢ã追å ãããããå ´åã¯ã©ãããã°ããã®ã§ããããã ã¦ã§ãã使ç¨ããã»ãã¥ãªãã£ã¢ãã«ã®ããããã®ãããªãã¨ã¯å¾æ¥ã®ã¦ã§ããã¯ããã¸ã¼ã使ç¨ããã®ã§ã¯ãããã»ã©ç°¡åã§ã¯ããã¾ããã ãªãªã¸ã³ããäºããä¿¡é ¼ãã¦ãããã©ãããããã¦ã¡ãã»ã¼ã¸ãã©ã®ããã«æ¸¡ãã®ãã«ã¤ãã¦èããªããã°ãªãã¾ããã
䏿¹ãã¡ãã»ã¼ã¸ãã£ã³ãã«ã¯ãç°ãªãé²è¦§ã³ã³ããã¹ãéã§ãã¼ã¿ãåãæ¸¡ããã¨ãå¯è½ã«ããå®å ¨ãªãã£ã³ãã«ãæä¾ãããã¨ãã§ãã¾ãã
ã¡ã¢: 詳細æ å ±ã¨ã¢ã¤ãã¢ã«ã¤ãã¦ã¯ã仿§ã®ã¦ã§ãä¸ã®ãªãã¸ã§ã¯ãæ©è½ã¢ãã«ã®åºç¤ã¨ãã¦ã®ãã¼ãï¼è±èªï¼ã®ã»ã¯ã·ã§ã³ãå½¹ã«ç«ã¤ã§ãããã
ç°¡åãªä¾ã¯ããã«ãGithub ã§ããã¤ãã®ãã¢ãå
¬éãã¾ããã æåã«ããã¼ã¸ã¨åãè¾¼ã¾ãã <iframe>
ã®éã®é常ã«åç´ãªåä¸ã¡ãã»ã¼ã¸è»¢éã示ãããã£ã³ãã«ã¡ãã»ã¼ã¸ã³ã°ã®åºæ¬çãªãã¢ããã§ãã¯ãã¦ãã ããï¼ã©ã¤ãã§ãå®è¡ãã¦ãã ããï¼ã
次ã«ãã¡ã¤ã³ãã¼ã¸ã¨ IFrame ã®éã§è¤æ°ã®ã¡ãã»ã¼ã¸ãéä¿¡ã§ãããããå°ãè¤éãªè¨å®ã示ãããã«ãã¡ãã»ã¼ã¸ãã¢ãè¦ã¦ãã ããï¼ã©ã¤ãã§å®è¡ï¼ã
ããã§ã¯ããã«ãã¡ãã»ã¼ã¸ãã¢ã«ç¦ç¹ãå½ã¦ã¾ããæ¬¡ã®ãããªæãã§ãã
ãã£ã³ãã«ã®ä½æãã¢ã®ã¡ã¤ã³ãã¼ã¸ã«ã¯ã <iframe>
ã«éä¿¡ããã¡ãã»ã¼ã¸ãå
¥åããããã®ããã¹ãå
¥åãå«ãåç´ãªãã©ã¼ã ãããã¾ãã ã¾ãã <iframe>
ããè¿ããã確èªã¡ãã»ã¼ã¸ã表示ããããã«å¾ã§ä½¿ç¨ããæ®µè½ãããã¾ãã
var input = document.getElementById("message-input");
var output = document.getElementById("message-output");
var button = document.querySelector("button");
var iframe = document.querySelector("iframe");
var channel = new MessageChannel();
var port1 = channel.port1;
// iframe ãèªã¿è¾¼ã¾ããã®ãå¾
ã¡ã¾ã
iframe.addEventListener("load", onLoad);
function onLoad() {
// ãã¿ã³ã®ã¯ãªãã¯ãå¾
ã¡åããã
button.addEventListener("click", onClick);
// port1 ã§ã¡ãã»ã¼ã¸ãå¾
ã¡åããã
port1.onmessage = onMessage;
// port2 ã iframe ã«ç§»ç®¡ãã
iframe.contentWindow.postMessage("init", "*", [channel.port2]);
}
// ãã¿ã³ãã¯ãªãã¯ãããã¨ãã« port1 ã«ã¡ãã»ã¼ã¸ãæç¨¿ãã
function onClick(e) {
e.preventDefault();
port1.postMessage(input.value);
}
// port1 ã§åä¿¡ããã¡ãã»ã¼ã¸ãå¦çãã
function onMessage(e) {
output.innerHTML = e.data;
input.value = "";
}
ã¾ã MessageChannel()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã使ç¨ãã¦æ°ããã¡ãã»ã¼ã¸ãã£ã³ãã«ã使ãã¾ãã
IFrame ãèªã¿è¾¼ã¾ãããããã¿ã³ç¨ã® onclick
ãã³ãã©ã¼ã¨ MessageChannel.port1
ç¨ã® onmessage
ãã³ãã©ã¼ãç»é²ãã¾ãã æå¾ã«ã MessageChannel.port2
ãwindow.postMessage
ã¡ã½ããã§ IFrame ã«ç§»ç®¡ãã¾ãã
iframe.contentWindow.postMessage
ã®è¡ã®æ©è½ãããå°ã詳ãã調ã¹ã¦ã¿ã¾ãããã ããã¯æ¬¡ã® 3 ã¤ã®å¼æ°ãåãã¾ãã
'init'
ã«è¨å®ãã¦ãã¾ãã*
ã¯ãä»»æã®ãªãªã¸ã³ããæå³ãã¾ããMessageChannel.port2
ã IFrame ã«ç§»ç®¡ãã¦ããã®ã§ãã¡ã¤ã³ãã¼ã¸ã¨ã®éä¿¡ã«ä½¿ç¨ã§ãã¾ãããã¿ã³ãã¯ãªãã¯ããã¨ããã©ã¼ã ãé常ã®ããã«éä¿¡ãããããã¹ãå
¥åã«å
¥åãããå¤ã¯ MessageChannel
ãä»ã㦠IFrame ã«éä¿¡ãã¾ãã
IFrame ã§ã¯ã次㮠JavaScript ãããã¾ãã
var list = document.querySelector("ul");
var port2;
// åæãã¼ã移管ã¡ãã»ã¼ã¸ãå¾
ã¡åããã
window.addEventListener("message", initPort);
// 移管ããããã¼ããè¨å®ãã
function initPort(e) {
port2 = e.ports[0];
port2.onmessage = onMessage;
}
// port2 ã§åä¿¡ããã¡ãã»ã¼ã¸ãå¦çãã
function onMessage(e) {
var listItem = document.createElement("li");
listItem.textContent = e.data;
list.appendChild(listItem);
port2.postMessage('Message received by IFrame: "' + e.data + '"');
}
åæã¡ãã»ã¼ã¸ã window.postMessage
ã¡ã½ãããä»ãã¦ã¡ã¤ã³ãã¼ã¸ããåä¿¡ããã¨ãinitPort
颿°ãå®è¡ããã¾ãã ããã¯ç§»ç®¡ããããã¼ããä¿åããã¡ãã»ã¼ã¸ã MessageChannel
ãééãããã³ã«å¼ã³åºããã onmessage
ãã³ãã©ã¼ãç»é²ãã¾ãã
ã¡ã¤ã³ãã¼ã¸ããã¡ãã»ã¼ã¸ãåä¿¡ãããããªã¹ãé
ç®ã使ãããããé åºãªããªã¹ãã«æ¿å
¥ãããªã¹ãé
ç®ã® textContent
ãã¤ãã³ãã® data
屿§ã¨åãå¤ã«è¨å®ãã¾ãï¼ããã¯å®éã®ã¡ãã»ã¼ã¸ãå«ã¿ã¾ãï¼ã
次ã«ãæåã« IFrame ã«ç§»ç®¡ããã MessageChannel.port2
ã§ MessagePort.postMessage
ãå¼ã³åºãã¦ã確èªã¡ãã»ã¼ã¸ãã¡ãã»ã¼ã¸ãã£ã³ãã«çµç±ã§ã¡ã¤ã³ãã¼ã¸ã«æç¨¿ãã¾ãã
ã¡ã¤ã³ãã¼ã¸ã«æ»ã£ã¦ã onmessage ãã³ãã©ã¼é¢æ°ãè¦ã¦ã¿ã¾ãããã
// port1 ã§åä¿¡ããã¡ãã»ã¼ã¸ãå¦çãã
function onMessage(e) {
output.innerHTML = e.data;
input.value = "";
}
å ã®ã¡ãã»ã¼ã¸ãæ£å¸¸ã«åä¿¡ããããã¨ã確èªããã¡ãã»ã¼ã¸ã IFrame ããè¿ãããã¨ãããã¯åã«ç¢ºèªã段è½ã«åºåããããã¹ãå ¥åã空ã«ãã¦æ¬¡ã®ã¡ãã»ã¼ã¸ã®éä¿¡ã®æºåããã¾ãã
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§MessageChannel
api.MessageChannel api.MessagePort MessagePort
api.MessageChannel api.MessagePort é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4