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+"/");