Javascript postMessage跨域通信示例
我试图从一个显示在iframe中的网站与包含带有postMessage的iframe的父页面进行通信。这两个页面需要来自不同的域。我已经使用jsfiddle和codepen(改编自此jsfiddle:)构建了一个快速示例,但是消息似乎没有到达。我猜当我试图调用postMessage时,我没有正确选择父级-有人能给我一个提示吗 这是我的密码笔: 代码输入: 代码输入:Javascript postMessage跨域通信示例,javascript,iframe,cross-domain,postmessage,Javascript,Iframe,Cross Domain,Postmessage,我试图从一个显示在iframe中的网站与包含带有postMessage的iframe的父页面进行通信。这两个页面需要来自不同的域。我已经使用jsfiddle和codepen(改编自此jsfiddle:)构建了一个快速示例,但是消息似乎没有到达。我猜当我试图调用postMessage时,我没有正确选择父级-有人能给我一个提示吗 这是我的密码笔: 代码输入: 代码输入: 功能接收器(消息){ console.log(message);//即使将消息添加到innerHtml中,也不会在控制台中显示此
功能接收器(消息){
console.log(message);//即使将消息添加到innerHtml中,也不会在控制台中显示此消息
//获取消息容器html元素(在本例中为messages div)
var messagecontainer=document.getElementById('messages');
var信任域http://fiddle.jshell.net';
//获取消息接收的时间
var currenttime=新日期();
//将时间格式化为用户可读的格式
var formattedtime=currenttime.getHours()+':'+currenttime.getMinutes()+':'+currenttime.getSeconds();
//检查消息事件的origin属性,以确保消息来自同一域)
如果(message.origin=='http://fiddle.jshell.net') {
if(message.data[0]!=“嵌入”){
var msgcontent=message.data;
messagecontainer.innerHTML+='MessageReceived@'+formattedtime+':'+msgcontent+'
';
}
}
}
//将事件侦听器添加到窗口对象以捕获任何消息事件
window.addEventListener('message',receiver,false);
//Get the users message from the message input box
var message = document.getElementById("message").value;
//Check that the message is not blank
if (message !== "") {
parent.postMessage(message, '*');
}
else {
alert("You cannot send a blank message!");
}
}
function receiver(message) {
console.log(message); // This never appears in the console, even when a message is added to innerHtml
//get the message container html element (in this case, the messages div)
var messagecontainer = document.getElementById('messages');
var trusteddomain = 'http://fiddle.jshell.net';
//Get the time of message receipt
var currenttime = new Date();
//format the time into a user readable format
var formattedtime = currenttime.getHours() + ':' + currenttime.getMinutes() + ':' + currenttime.getSeconds();
//inspect the origin property of the message event to ensure the message originates from the same domain)
if (message.origin == 'http://fiddle.jshell.net') {
if (message.data[0] != 'embed') {
var msgcontent = message.data;
messagecontainer.innerHTML += 'message received @ ' + formattedtime + ': ' + msgcontent + '<br />';
}
}
}
//Add an event listener to the window object to catch any message events
window.addEventListener('message', receiver, false);