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

标签 google-chrome-app

使用 chrome 开发人员工具时,似乎每个应用程序窗口(和背景“页面”)都有自己的 javascript 上下文(对象空间、执行线程),但 chrome.app.window.create 的 createdWindow 回调显然提供了直接访问刚刚创建的“其他”窗口的对象。

鉴于此,我不清楚在 Windows 之间进行通信的最佳方式;例如如果我打开第二个窗口作为对话框,当用户单击确定保存更改时,我应该使用 postMessage、sendMessage 还是只调用主窗口中对象的函数。我查看了消息示例,它们似乎专注于两个不同应用程序之间或应用程序和扩展程序之间的通信。

因此,我正在寻求对一个应用程序中的内存和执行模型的清晰描述。真的有独立的上下文,还是只是一个对象空间,一个执行线程?在同一 Chrome 应用程序的窗口之间进行通信的最佳方式是什么?

最佳答案

这是一个很好的问题詹姆斯!

多个 Chrome 窗口并不是完全独立的。它们共享一个线程和对象空间,但是每个窗口对象是不同的。在 javascript 中,在当前窗口上查找对事物的无作用域引用,因此这使窗口看起来是不同的对象空间 - 但实际上并非如此。

因此,您可以进入另一个窗口并在那里执行一个函数,或者以其他方式操作状态(例如,将另一个窗口上的变量设置为当前窗口中的一个函数),这是可以接受和支持的。

关于google-chrome-app - 如何在同一个 Chrome 应用程序的多个窗口之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765870/

相关文章:

google-chrome-app - 'only supported in ash' 是什么意思?

google-chrome-extension - 从 chrome 打包的应用程序(或扩展程序)启动一个带有默认文件处理程序的本地文件

javascript - 如何在 Chrome App 中与 WebView 通信?

javascript - 从 Chrome 应用程序内部运行网络服务器

oauth-2.0 - Chrome打包应用程序oauth重定向由于扩展程序id不同而出现问题

ios - 在 iOS 上复制本地文件时遇到一些麻烦

google-chrome-extension - 在Chrome打包的应用中从manifest.json读取版本

javascript - 使用内容脚本/消息与 Chrome 应用程序(不是扩展程序)发送数据

javascript - 为什么我无法在 Chrome 应用中选择文件?

html - Chrome 应用中的 indexedDB