chrome.runtime.sendNativeMessage发的消息C++怎么接收?环境搭建
时间: 2024-10-23 16:07:22 浏览: 22
chrome.VisualElementsManifest.xml
Chrome浏览器的`chrome.runtime.sendNativeMessage` API允许Web内容通过消息传递机制与浏览器进程通信。如果你要在C++的扩展程序背景页面(background script)中接收这些从JavaScript发送过来的消息,你需要做以下几个步骤:
1. **声明接收到消息的函数**:
在C++背景页面中,定义一个回调函数,比如`void HandleMessage(const base::Value& message)`,这个函数会在接收到JavaScript的消息时被调用。
```cpp
content::RenderFrameHost* frame = ... // 获取当前帧对象
receiver_.AddFilter(frame->GetProcess()->GetID(), frame->GetRoutingID(),
base::BindRepeating(&YourExtensionClass::HandleMessage,
base::Unretained(this)));
```
这里的`receiver_`是一个`BrowserMessageFilter`实例,它负责处理特定类型的跨进程消息。
2. **处理消息**:
实现`HandleMessage`函数来解析JavaScript传来的`base::Value`对象,并根据需要进行相应的操作。例如,如果消息是一个字符串,你可以这样做:
```cpp
void YourExtensionClass::HandleMessage(const base::Value& message) {
std::string data;
if (message.GetString(&data)) {
// 对数据进行处理...
// 例如:std::cout << "Received message: " << data << std::endl;
} else {
// 如果不是字符串,根据实际需求处理其他类型的数据...
}
}
```
3. **发送消息**:
JavaScript在Chrome扩展环境中使用`chrome.runtime.sendMessage`调用`sendNativeMessage`,将数据打包成`base::Value`对象。C++端无法直接触发发送,但可以设置一个事件监听,当从浏览器API触发时进行响应。
4. **环境搭建**:
- 首先,确保你已经创建了`manifest.json`文件,并配置了`"permissions"`部分以允许与背景脚本的交互。
- 确保你在扩展项目的C++代码中包含了相关的头文件,如`#include <extensions/browser/api/runtime/runtime_api.h>`等。
- 需要链接必要的库,如`-lcontent_common`、`-lextensions`。
5. **启动应用**:
使用Chrome的开发者模式运行扩展,或者发布到用户设备上。
阅读全文