从主机应用程序启动消息到chrome扩展

时间:2014-09-09 15:49:24

标签: c++ google-chrome-extension chrome-native-messaging

由于堆栈溢出的好人,我已设法从chrome扩展程序向本机(C ++)应用程序发送消息。 本机主机应用程序收到消息后,可以返回任何响应数据。但是,这是为了响应从扩展程序接收数据的本机应用程序。此外,扩展程序发送的消息不是同步的,因此扩展程序不会等待来自主机应用程序的响应。

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

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

或者有其他方法可以实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

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

有关如何继续使用原生应用的说明,请访问:https://developer.chrome.com/extensions/messaging#native-messaging。描述了您可以将stdio传递给type-parameter。然后,每当您向应用发送数据时,Chrome都会写入stdin。您可以使用stdout发回消息(即响应某些内容)(对于C ++:通过cout打印)。在原生应用中,您不必知道您的原生应用实际上是Chrome原生应用。它只需要知道它从stdin接收数据并通过stdout发送数据。

答案 1 :(得分:0)

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

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