javascript windows postMessage在初始事件后返回消息

时间:2015-12-04 11:41:55

标签: javascript jquery postmessage

我在两个域之间传递消息,第1个是www.domain1.com/stuff,第2个是www.domain1.com:8888/stuff/(它是一个python rest 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);

no 2域/窗口代码使用此代码完美地接收代码,它甚至可以使用以下代码将“yo yo yo”消息发送回1号窗口...

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中取出该消息并将其发送到数据库,该数据库向我返回另一个值,我试图将其发送回1号,代码就像这样,几秒钟后就完全不同了...

postMessage("Messageforwindow1","www.domain1.com/stuff");

但它给了我这个错误信息......

  

无法在'DOMWindow'上执行'postMessage':目标原点   提供的('http://www.domain1.com/)与收件人窗口不匹配   origin('http://www.domain1.com:8888')。

我说我可以在addEventListener中返回消息,但不能在以后返回。 任何想法如何绕过这个或如果你知道我正在发生什么?如果可以的话请帮忙。感谢

1 个答案:

答案 0 :(得分:0)

好的,我当然忘记了关闭。

这就是我修复它的方法。 将thisevent声明为全局变量。

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