我在两个域之间传递消息,第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中返回消息,但不能在以后返回。 任何想法如何绕过这个或如果你知道我正在发生什么?如果可以的话请帮忙。感谢
答案 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+"/");