chrome.runtime.sendNativeMessage发的消息C++怎么接收?完整示例
时间: 2024-10-23 18:21:05 浏览: 13
在 Chrome 浏览器的背景脚本(background script)中,`chrome.runtime.sendMessage` 和 `chrome.runtime.sendNativeMessage` 都用于在不同的脚本之间传递消息,其中 `sendNativeMessage` 用于跨进程通信,比如从浏览器到扩展程序,再到 C++ 插件。
当你想在 C++ 插件端接收来自 JavaScript 的 native 消息时,你需要创建一个注册的回调函数,并使用 `content::BrowserContext::AddMessageFilter` 来监听特定的消息类型。以下是一个简单的示例:
首先,在 C++ 中设置消息过滤器:
```cpp
#include "content/public/browser/browser_context.h"
#include "content/public/browser/message_filter.h"
// 注册一个处理 native 消息的函数
void RegisterMessageHandler(content::BrowserContext* browser_context) {
content::RenderProcessHost::GetGlobal()->AddFilter(
base::BindRepeating(&YourPluginClass::OnNativeMessageReceived,
base::Unretained(this), browser_context));
}
// C++ 类中的接收函数
bool YourPluginClass::OnNativeMessageReceived(content::BrowserContext* context,
const std::string& request_data) {
// 解析并处理请求数据
// ...
return true; // 如果成功处理则返回true,否则可以返回false
}
```
然后,在 JavaScript 端发送 native 消息:
```javascript
chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
if (request.some_condition) { // 根据条件判断是否发送 native 消息
chrome.runtime.sendNativeMessage('your_extension_id', 'your_message');
}
});
```
这里,`'your_extension_id'` 应替换为你的实际扩展 ID,`'your_message'` 是你想传输的数据。
阅读全文