c++ - 启动从主机应用程序到 chrome 扩展程序的消息

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

感谢 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/

相关文章:

c++ - 不在 city.begin() 开始 map 迭代器

c++ - 类数据成员的初始化顺序

javascript - Chrome 扩展程序获取元关键字

javascript - 使用 chrome 扩展程序进行查询并获取源代码

c++ - 如何在 Chrome Native Messaging Extension 的 native 应用程序中使用 native 主机消息

javascript - 如何确定 connectNative 是否失败或成功

google-chrome-extension - 保护 Chrome native 消息主机

c# - 创建 C++ DLL,然后在 C# 中使用它

c++ - "while"循环在应该结束时没有结束

google-chrome-extension - GTM - 将事件/数据推送到 gtm dataLayer 不向 https ://www. google-analytics.com/r/collect?v 发送任何内容