ใฏใใใซ
iframe่กจ็คบ้จๅใฎใฏใชใใฏใคใใณใใๅๅพใใใจใใ่จไบใงใiframeๅ ใฎใคใใณใใiframeใฎcontentWindowใซๅฏพใaddEventlistenerใ็ป้ฒใใฆ่ฆชใใผใธใงๅๅพใใๆนๆณใ็ดนไปใใพใใใ
ใใฎ่จไบใงใฏpostMessageใๅฉ็จใใฆiframeใจ่ฆชใใผใธ้ใงใใๅใใใๆนๆณใ็ดนไปใใพใใ
ใใฎ่จไบใฎๅฏพ่ฑก่
- ใใผใธใซๅใ่พผใใ iframe่ฆ็ด ใใๆ ๅ ฑใๅๅพใใใ
- ใใผใธใซๅใ่พผใใ iframe่ฆ็ด ใจ่ฆชใใผใธ้ใง็ธไบ้ใฎใใผใฟ้ๅไฟกใ่กใใใ
- ใใผใธใซiframeๅใ่พผใฟใใใๅๆใฎใใผใธใไฝๆใใฆใใคใใณใ็บ็ๆใซ่ฆชใใผใธใซๆ ๅ ฑใๆธกใใใ
iframeใจ่ฆชใใผใธ้ใฎใใผใฟ้ๅไฟก
postMessageใๅฉ็จใใ้ๅไฟกใฎๆนๆณ
ๅญใใผใธ
ใใผใฟใ่ฆชใใผใธใซ้ไฟกใใๅ ดๅ
window.parent.postMessage(message, targetOrigin);
// ไพ
window.parent.postMessage("sample.jpใงใใๅไฟกๅบๆฅใชใใกใใปใผใธใงใ", "https://sample.jp");
window.parent.postMessage({
type: "sample",
data: {
message: "่ชฐใงใๅไฟกใงใใใกใใปใผใธใงใ",
},
}, "*");
const example = {
type: "example",
data: {
message: "JSONใงๆธกใใกใใปใผใธใงใ",
}
}
window.parent.postMessage(JSON.stringfy(example), "*");
ๅผๆฐใฎ่ชฌๆ
- message
ไปใฎใฆใฃใณใใฆใซ้ใใใใใผใฟใงใใ
ๆฑบใใใใๅใฏ็กใใงใใใใชใใธใงใฏใใงๆธกใใใจใงtypeใdataใชใฉ่ฆชใใผใธใงๆฑใใใใๅ
ๅฎนใงๆธกใใใจใๅบๆฅใพใใ
- targetOrigin
ใใผใฟใ้ไฟกใใ้ใฎๅใๅใๅดใฎใชใชใธใณใ้ๅฎใใใใจใๅบๆฅใพใใ
ไพใใฐhttps://sample.jpใจใใๅ ดๅใฏใใชใชใธใณใhttps://sample.jpใฎใฆใฃใณใใฆใงใใใใผใฟใฏๅไฟกๅบๆฅใพใใใ
postMessageใฎ้ไฟกๅ
ใๆฑบใพใฃใฆใใๅ ดๅใฏใชใชใธใณๆๅฎใใใพใใใใ
ใใผใฟใ่ฆชใใผใธใใๅไฟกใใๅ ดๅ
window.addEventListener("message", (response) => {
// ๅๅพใใๅ
ๅฎนใๅฉ็จใใๅฆ็
})
postMessageใง้ไฟกใใใใใผใฟใๅใๅใใซใฏใaddEventListenerใง็ป้ฒใใmessageใคใใณใใๆค็ฅใใใใจใงๅๅพใใใใจใๅบๆฅใพใใ
่ฆชใใผใธ
ใใผใฟใiframeใงๅใ่พผใใ ๅญใใผใธใซ้ไฟกใใๅ ดๅ
const iframeElement = document.querySelector("iframe");
iframeElement.contentWindow.postMessage(message, targetOrigin);
iframeใฎWindowใชใใธใงใฏใใซใขใฏใปในใใฆใๅ ใปใฉใจๅใใใใซpostMessageใๅฎ่กใใฆใใพใใ
ใใผใฟใๅญใใผใธใใๅไฟกใใๅ ดๅ
window.addEventListener("message", (response) => {
// ๅๅพใใๅ
ๅฎนใๅฉ็จใใๅฆ็
})
ใใกใใฏๅญใใผใธใงๅไฟกใใๅ ดๅใจ้ใใใใพใใใ
ไปฅไธใiframeใจ่ฆชใใผใธ้ใงpostMessageใๅฉ็จใใฆใใผใฟ้ๅไฟกใ่กใๆนๆณใซใชใใพใใ
ไฝฟ็จไพ
ไปฅไธpostMessageใฎไฝฟ็จไพใงใใiframeใจ่ฆชใใผใธใง้ฃๆบใใฆ็ธไบ้ใฎใใผใฟๅใๆธกใใใใไพใ็ดนไปใใพใใ
็ขบ่ช็ฐๅข
ใฝใผในใณใผใ
iframeใงใใฟใณใฏใชใใฏใใใๅๆฐใ่ฆชใใผใธใซๆธกใ
iframe
let leftCount = 0;
const leftClick = () => {
const message = {
type: "click",
data: {
name: "left",
count: leftCount,
}
}
window.parent.postMessage(message, "*");
leftCount++;
}
let rightCount = 0;
const rightClick = () => {
const message = {
type: "click",
data: {
name: "right",
count: rightCount,
}
}
window.parent.postMessage(message, "*");
rightCount++;
}
// ใชใชใธใณใ็ฐใชใใฎใง่ฆชใใผใธใงใฏๅไฟกๅบๆฅใชใ
const originRestricted = () => {
const message = {
type: "click",
data: {
name: "restricted",
}
}
window.parent.postMessage(message, "https://sample.jp");
}
่ฆชใใผใธ
window.addEventListener("message", (response) => {
if (response.data.type === "click") {
const data = response.data.data;
if (data.name === "left") {
const leftNumberElement = document.querySelector("#left-number");
leftNumberElement.innerHTML = data.count;
} else if (data.name === "right") {
const rightNumberElement = document.querySelector("#right-number");
rightNumberElement.innerHTML = data.count;
}
}
})
่ฆชใใผใธใง้ธๆใใใ่ฒใiframeใง่กจ็คบใใ
่ฆชใใผใธ
const postColor = (color) => {
const iframeElement = document.querySelector("iframe");
const message = {
type: "color",
data: {
color: color,
}
}
iframeElement.contentWindow.postMessage(message, "*");
}
iframe
window.addEventListener("message", (response) => {
if (response.data.type === "color") {
const messageAreaElement = document.querySelector(".message-area");
const createDivElement = document.createElement("div");
const color = response.data.data.color;
if (color === "red") {
createDivElement.className = "red";
} else if (color === "blue") {
createDivElement.className = "blue";
} else if (color === "yellow") {
createDivElement.className = "yellow";
}
messageAreaElement.appendChild(createDivElement);
}
})

Comments
Let's comment your feelings that are more than good