javascript windows postMessage return 初始事件后的消息
javascript windows postMessage return message after initial event
我在 2 个域之间传递消息,1 号是 www.domain1.com/stuff,2 号是 www.domain1.com:8888/stuff/(它是 python休息 API)
我使用以下完美且有效的代码将数据从 1 发送到 2...
var popup = window.open(imgtarget, 'myWindow','left=20,top=20,width=500,height=800,toolbar=1,resizable=0');
setTimeout(function(){
popup.postMessage(domain,imgtarget);
}, 1000);
2 号域/ window 代码使用此代码完美地接收了代码,它甚至使用以下代码成功地将 "yo yo yo" 消息发送回号码 1 window。 .
window.addEventListener('message',function(event) {
if(event.origin !== 'http://www.domain1.com') return;
domain =event.data,event;
origin_site=event.origin ;
event.source.postMessage('Yo yo yo',event.origin);
},false);
然后我从数字 1 中获取该消息并将其发送到数据库,该数据库 return 对我来说是另一个值,我试图将其发送回数字 1,代码如下所示,在几秒钟后完全不同的功能...
postMessage("Messageforwindow1","www.domain1.com/stuff");
但是它给了我这个错误信息...
Failed to execute 'postMessage' on 'DOMWindow': The target origin
provided ('http://www.domain1.com/) does not match the recipient window's
origin ('http://www.domain1.com:8888').
正如我所说,我可以 return addEventListener 中的消息,但不能稍后。
任何想法如何解决这个问题,或者您是否知道我到底在做什么?如果可以的话请帮忙。谢谢
好吧,我当然忘了闭包。
我就是这样解决的。
将此事件声明为全局变量。
var thisevent;
然后我像这样在下面创建一个闭包
thisevent=event;
并将其添加到下面的 window.addEventListener...
window.addEventListener('message',function(event) {
//if(event.origin !== 'http://www.demo.dev') return;
thisevent=event;//HERE I CREATE A CLOSURE
domain =event.data,event;
origin_site=event.origin ;
event.source.postMessage('Yo yo yo',event.origin);
//event.source.postMessage('hola back !',event.origin);
},false);
后来在某些功能中我这样做了
thisevent.source.postMessage(new_files,origin_site+"/");
我在 2 个域之间传递消息,1 号是 www.domain1.com/stuff,2 号是 www.domain1.com:8888/stuff/(它是 python休息 API) 我使用以下完美且有效的代码将数据从 1 发送到 2...
var popup = window.open(imgtarget, 'myWindow','left=20,top=20,width=500,height=800,toolbar=1,resizable=0');
setTimeout(function(){
popup.postMessage(domain,imgtarget);
}, 1000);
2 号域/ window 代码使用此代码完美地接收了代码,它甚至使用以下代码成功地将 "yo yo yo" 消息发送回号码 1 window。 .
window.addEventListener('message',function(event) {
if(event.origin !== 'http://www.domain1.com') return;
domain =event.data,event;
origin_site=event.origin ;
event.source.postMessage('Yo yo yo',event.origin);
},false);
然后我从数字 1 中获取该消息并将其发送到数据库,该数据库 return 对我来说是另一个值,我试图将其发送回数字 1,代码如下所示,在几秒钟后完全不同的功能...
postMessage("Messageforwindow1","www.domain1.com/stuff");
但是它给了我这个错误信息...
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('http://www.domain1.com/) does not match the recipient window's origin ('http://www.domain1.com:8888').
正如我所说,我可以 return addEventListener 中的消息,但不能稍后。 任何想法如何解决这个问题,或者您是否知道我到底在做什么?如果可以的话请帮忙。谢谢
好吧,我当然忘了闭包。
我就是这样解决的。 将此事件声明为全局变量。
var thisevent;
然后我像这样在下面创建一个闭包
thisevent=event;
并将其添加到下面的 window.addEventListener...
window.addEventListener('message',function(event) {
//if(event.origin !== 'http://www.demo.dev') return;
thisevent=event;//HERE I CREATE A CLOSURE
domain =event.data,event;
origin_site=event.origin ;
event.source.postMessage('Yo yo yo',event.origin);
//event.source.postMessage('hola back !',event.origin);
},false);
后来在某些功能中我这样做了
thisevent.source.postMessage(new_files,origin_site+"/");