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

How to communicate between multiple windows of same chrome apps

本文关键字:窗口 之间 通信 应用程序 chrome      更新时间:2023-09-26

我有一个打包的chrome应用程序有多个窗口。例如,如果我点击第一个窗口中的按钮,那么第二个窗口就会打开。现在如何发送消息或命令给对方。我已经读了很多关于它,但没有弄清楚,因为我是非常新的。任何示例代码都会很有帮助。

有一个存在的问题如何在同一chrome应用程序的多个窗口之间进行通信?,但不知道该怎么做。

提前感谢!!

您可以使用窗口的postmessage方法,以便将信息发送到另一个窗口。按照这种方法,你可以从一个窗口(a)在另一个窗口(B)上执行一个方法。你需要在窗口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

在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);
});