chrome.runtime.sendNativeMessage发的消息C++怎么接收?简单完整示例
时间: 2024-10-23 07:21:02 浏览: 16
谷歌chrome(扩展ie内核 chrome.r39.crx+demo示例).zip
在Chrome浏览器的扩展程序中,`chrome.runtime.sendNativeMessage()` 是用于在背景脚本与内容脚本或者跨进程通信的功能。当你在JavaScript部分发送消息到C++扩展API时,你需要在C++端设置对应的接收函数来处理这些消息。
首先,在C++的background/service.cc文件里,假设你已经包含了必要的头文件并创建了一个事件监听器:
```cpp
#include "content/public/common/content_switches.h"
#include "extensions/browser/api/runtime/runtime_api.h"
void OnRuntimeMessageReceived(const base::Value::Dict& message) {
VLOG(1) << "Received a native message: " << message.ToString();
// 对message中的数据进行解析和处理
// ... (具体操作根据你的业务需求)
}
// 注册消息处理器
bool RegisterRuntimeMessageHandlers(content::BrowserContext* browser_context) {
runtime::api::Runtime* runtime = runtime::api::Runtime::Get(browser_context);
if (!runtime->RegisterMessageCallback("your_message_name", base::BindRepeating(&OnRuntimeMessageReceived))) {
LOG(ERROR) << "Failed to register runtime message callback";
return false;
}
return true;
}
```
然后在`background/service.cc`的`BackgroundService::Create()`方法中初始化事件监听器:
```cpp
BackgroundService::BackgroundService(content::BrowserContext* context)
: task_environment_(content::GetIOThreadTaskRunner({})),
weak_factory_(this) {
if (!RegisterRuntimeMessageHandlers(context)) {
// Handle error...
}
}
```
当JavaScript通过`chrome.runtime.sendNativeMessage`发送消息时,C++端会接收到并调用`OnRuntimeMessageReceived`函数来处理。
**示例(JavaScript,内容脚本):**
```javascript
chrome.runtime.sendMessage({
name: 'your_message_name', // 替换为你注册的message名称
data: { key: 'value' } // 需要传递的数据
}, function(response) {
console.log('Response from C++:', response);
});
```
阅读全文