0

由于堆栈溢出的好人,我设法将消息从 chrome 扩展发送到本机 (C++) 应用程序。一旦原生主机应用程序接收到消息,它就可以返回任何响应数据。但是,这是对从扩展接收数据的本机应用程序的响应。此外,扩展程序发送的消息不是同步的,因此扩展程序不会等待主机应用程序的响应。

我的要求是从本机应用程序启动通信连接,即我的本机应用程序将定期向 chrome 扩展发送更新。是否有任何机制来启动从本机应用程序发送的消息并将其传递给适当的 chrome 扩展程序?

我基本上想要实现以下目标:我想在 webRequest.OnBeforeSendHeaders 之类的事件上发布消息,并且我希望对消息的响应来决定我是否应该阻止 url 请求。如果响应的接收将在回调上进行,这将主要在不同的线程上,这将不允许我等待 webRequest.OnBeforeSendHeaders 线程上的响应。在等待本机应用程序响应我的请求时,有没有办法可以暂停 webRequest.OnBeforeSendHeaders?或者 webRequest.OnBeforeSendHeaders 可以查看消息缓冲区(循环)以查看本机应用程序是否已响应?

还是有其他方法可以实现这一目标?

4

2 回答 2

1

chrome 中没有任何东西是同步的。这就是铬不太可能冻结的原因之一。但这不是问题。即使使用异步代码,您也可以轻松实现您想要的,这只是您必须遵循的另一种模式。

关于如何继续使用本机应用程序的描述在这里:https ://developer.chrome.com/extensions/messaging#native-messaging 。描述了您可以将例如传递stdio给类型参数。然后,每当您向应用发送数据时,Chrome 都会写入stdin. stdout您可以使用(在 C++ 的情况下:通过 打印)发回消息(即响应某事cout)。在原生应用中,您不必知道自己的原生应用实际上是 Chrome 原生应用。它只需要知道它从 接收数据stdin并通过 发送数据stdout

于 2014-09-09T15:56:45.040 回答
0

按照设计,您无法从本机应用程序启动连接。

对于每个打开的端口,Chrome 都会启动您应用的一个实例。如果您希望应用程序发送更新,您需要在 Chrome 端打开一个端口并保持打开状态。

于 2014-09-09T18:35:40.010 回答