Mic*_*ick 9 javascript iframe postmessage cross-browser sendmessage
我目前正在制作一个应用程序,需要在两个域之间发送信息(将在页面加载时)。
网站 1: 创建 iFrame > 向网站 2 发送 Postmessage
window.onload = function () {
iframe = document.createElement("IFRAME");
iframe.setAttribute("src", "WEBSITE 2");
iframe.style.width = "200px";
iframe.style.height = "200px";
iframe.style.border = "none"; //please do not show the iframe JS.
iframe.id = "lol";
document.body.appendChild(iframe);
document.getElementById("test").innerHTML = "Test!"
window.addEventListener("message", listener, false);
window.setTimeout(sendMessage,100)
}
function sendMessage(e) {
var receiver = document.getElementById('lol').contentWindow;
receiver.postMessage('Hello Treehouse!', 'WEBSITE 2');
}
function listener(event){
if ( event.origin !== "WEBSITE 2" )
return //website isn't ours bro
document.getElementById("test").innerHTML = event.data
}
Run Code Online (Sandbox Code Playgroud)
网站 2 从网站 1 获取 Postmessage > 创建 iFrame (?) > 将 Postmessage 发送到网站 1 (?)
window.onload = function createiframe() {
window.addEventListener("message", listener, false);
}
function listener(event){
if ( event.origin !== "WEBSITE 1" )
return //website isn't ours bro
document.getElementById("test").innerHTML = event.data
window.setTimeout(createiFrame,1000)
}
function createiFrame() {
iframe = document.createElement("IFRAME");
iframe.setAttribute("src", "WEBSITE 1");
iframe.style.width = "230px";
iframe.style.height = "203px";
iframe.style.border = "none"; //please do not show the iframe JS.
iframe.id = "lol";
document.body.appendChild(iframe);
document.getElementById("test").innerHTML = "Test!"
window.setTimeout(sendMessage,1000)
}
function sendMessage(e) {
var receiver = document.getElementById('lol').contentWindow;
receiver.postMessage('Hello ', 'WEBSITE 1');
console.log('Message sent')
}
Run Code Online (Sandbox Code Playgroud)
iFrame 是在网站 2 上创建的,然后用网站 1 和网站 2 进行循环,但是从网站 2 发送到网站 1 的 Postmessage 显示在额外的 iFrame 中,是否可以将消息发送回网站1 在浏览器中打开?
显示内容示例:
测试!测试!你好测试!
谢谢!
Rok*_*jan 13
要响应Event.origin域,您可以随意处理消息的Event.source
// Child website:
window.addEventListener("message", evt => {
// if (evt.origin !== "http://example.com") return;
console.log(evt.data) // "Question!"
evt.source.postMessage("Response!", evt.origin);
});
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#The_dispatched_event
source
对发送消息的窗口对象的引用;您可以使用它在两个不同来源的窗口之间建立双向通信。
如果我仔细看的话,在网站 2 的 sendMessage() 函数中,看起来您正在获取新创建的 iframe 元素,然后向其发布消息。实际上您确实想向网站 1 发布消息。
从网站 2...尝试类似的东西
window.parent.postMessage("hello website 1", "*");
Run Code Online (Sandbox Code Playgroud)