感谢 stack overflow 的好心人,我已经成功地将消息从 chrome 扩展程序发送到 native (C++) 应用程序。 一旦 native 主机应用程序收到消息,它就可以返回任何响应数据。但是,这是为了响应 native 应用程序从扩展程序接收数据。此外,扩展程序发送的消息不是同步的,因此扩展程序不会等待主机应用程序的响应。
我的要求是从 native 应用程序启动通信连接,即我的 native 应用程序将定期向 chrome 扩展程序发送更新。 是否有任何机制可以启动从 native 应用程序发送的消息并将其传递给适当的 chrome 扩展程序?
我基本上想实现以下目标: 我想发布有关 webRequest.OnBeforeSendHeaders 等事件的消息,我希望对消息的响应决定我是否应该阻止 url 请求。如果响应的接收将通过回调进行,这将主要在不同的线程上进行,这将不允许我在 webRequest.OnBeforeSendHeaders 线程上等待响应。 在等待 native 应用程序响应我的请求时,有什么方法可以暂停 webRequest.OnBeforeSendHeaders 吗?或者 webRequest.OnBeforeSendHeaders 是否可以查看消息缓冲区(在循环中)以查看 native 应用程序是否已响应?
或者有其他方法可以实现吗?
最佳答案
chrome 中没有什么是同步的。这就是 chrome 不太可能卡住的原因之一。但这不是问题。即使使用异步代码,您也可以轻松实现您想要的,这只是您必须遵循的另一种模式。
有关如何处理 native 应用程序的说明在此处:https://developer.chrome.com/extensions/messaging#native-messaging .描述了您可以将例如 stdio
传递给类型参数。然后,无论何时您向应用程序发送数据,Chrome 都会写入 stdin
。您可以使用 stdout
(如果是 C++:通过 cout
打印)发送回消息(即响应某事)。在原生应用中,你不必知道你的原生应用实际上是一个 Chrome 原生应用。它只需要知道它从 stdin
接收数据并通过 stdout
发送数据。
关于c++ - 启动从主机应用程序到 chrome 扩展程序的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748963/