如何在相同Chrome应用程序的多个窗口之间进行通信

时间:2015-06-09 09:29:13

标签: javascript google-chrome google-chrome-app

我有一个包含多个窗口的打包镀铬应用。例如,如果我在第一个窗口中单击按钮,则打开第二个窗口。现在如何向对方发送消息或命令。 我已经阅读了很多关于它的内容,但没有弄清楚,因为我对此非常陌生。 任何示例代码都非常有用。

现有问题How to communicate between multiple windows of the same chrome app?,但不明白该怎么做。

提前致谢!!!

2 个答案:

答案 0 :(得分:0)

您可以使用窗口的postmessage方法,以便将信息发送到另一个窗口。通过遵循此方法,您可以从不同窗口(B)上的窗口(A)执行方法。您需要在窗口B上创建一个事件,告知A该方法正确运行。

代码如下:

<强> 发信人:

//create popup window
var domain = 'http://scriptandstyle.com';
var myPopup = window.open(domain + '/windowPostMessageListener.html','myWindow');

//periodical message sender
setInterval(function(){
    var message = 'Hello!  The time is: ' + (new Date().getTime());
    console.log('blog.local:  sending message:  ' + message);
    myPopup.postMessage(message,domain); //send the message and target URI
},6000);

//listen to holla back
window.addEventListener('message',function(event) {
    if(event.origin !== 'http://scriptandstyle.com') return;
    console.log('received response:  ',event.data);
},false);

<强> 目的地:

//respond to events
window.addEventListener('message',function(event) {
    if(event.origin !== 'http://davidwalsh.name') return;
    console.log('message received:  ' + event.data,event);
    event.source.postMessage('holla back youngin!',event.origin);
},false);

您还可以在此处找到详细解释:http://davidwalsh.name/window-postmessage

答案 1 :(得分:0)

对于Chrome应用,则不需要有关域的部分。

您需要以下内容:

targetWindow = chrome.app.window.get("window-id").contentWindow;
targetWindow.postMessage(message, "*");

发送消息,而接收:

window.addEventListener('message', function(event) {
  var windowId = chrome.app.window.current().id;

  console.log(windowId + ': received a message: ' + event.data, event);
  var message = 'hello back!';
  console.log(windowId + ': sending message: ' + message);            
  event.source.postMessage(message, event.origin);
});