2017-10-11 144 views
0

我打開一個彈出式窗口:比較窗口對象

a = window.open('//example.com'); 

從這個窗口,我發送郵件裏面:

window.opener.postMessage('test', '*'); 

並與接受它:

window.addEventListener('message', e => b = e.source); 

因爲這會觸發任何發送到窗口的消息,所以我想使if(a == b)來驗證消息來自窗口a。可悲的是,這總是會返回false。有關於此的任何想法?

+0

是您的源代碼是否行到? postMessage需要多一個參數才能運行。 – songxunzhao

+0

@songxunzhao你說得對,我忘了。但那不是重點。 –

+1

它適用於我的示例,請檢查此鏈接https://plnkr.co/edit/q1bfQwWJlsx8eQbGSqEA?p=preview – songxunzhao

回答

0

您可以檢查eventevent.source.origin

if (event.source.origin === location.protocol + "//example.com" 
    && event.origin === location.protocol + "//example.com") { 
    // do stuff 
} 
+0

我知道,但是這個域上有幾個應用程序將消息發送到我的窗口。所以這沒有幫助。 –

+0

@ I'mLu不確定你的意思?您也可以將打開的「window」的'.name'屬性設置爲一個唯一值,並將該屬性值發佈到'.opener' – guest271314