要使用 Qt/C++ 与 Chrome 扩展进行通信,您需要设置两部分:一个是 Qt 应用程序(本地客户端),另一个是 Chrome 扩展。下面是一个简单的示例,以说明如何实现这一点。
第一步:创建 Chrome 扩展
创建文件结构:
my_extension/
├── manifest.json
├── content.js
manifest.json
文件:{
"manifest_version": 3,
"name": "Search Box Content Getter",
"version": "1.0",
"permissions": ["activeTab", "scripting"],
"background": {
"service_worker": "background.js"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
}
content.js
文件:chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === 'getInputValue') {
const input = document.querySelector('input[type="text"]'); // 修改为目标搜索框选择器
if (input) {
sendResponse({ value: input.value });
} else {
sendResponse({ value: null });
}
}
return true; // 异步响应
});
第二步:创建 Qt/C++ 应用程序
在您的 Qt 项目中,您可以使用 QWebSocket
或者 QNetworkAccessManager
来与 Chrome 扩展进行通信。下面是一个示例代码,假设您的应用程序已经设置了 Qt 环境并支持网络请求。
- Qt/C++ 示例代码:
#include <QCoreApplication>
#include <QWebSocket>
#include <QJsonDocument>
#include <QJsonObject>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QWebSocket webSocket;
// 连接到Chrome扩展提供的WebSocket服务器(需自行实现)
webSocket.open(QUrl("ws://localhost:YOUR_PORT")); // 替换 YOUR_PORT
QObject::connect(&webSocket, &QWebSocket::connected, [&]() {
qDebug() << "Connected to extension!";
// 请求获取搜索框内容
QJsonObject json;
json["action"] = QString("getInputValue");
QJsonDocument doc(json);
webSocket.sendTextMessage(doc.toJson());
});
QObject::connect(&webSocket, &QWebSocket::textMessageReceived, [](const QString &message) {
QJsonDocument doc = QJsonDocument::fromJson(message.toUtf8());
if (doc.isObject()) {
QJsonObject obj = doc.object();
QString value = obj["value"].toString();
qDebug() << "Search box content:" << value;
}
});
return a.exec();
}
注意事项
- 确保在开发环境中启用了 WebSocket,并根据您的需求修改消息发送和接收逻辑。
- 您可能需要通过浏览器加载未打包的扩展以进行调试。转到
chrome://extensions/
并加载您的扩展文件夹。 - 上述示例中的 URL 和选择器可能需要根据实际情况进行调整。
以上是如何通过 Qt/C++ 和 Chrome 扩展进行基本通信的示例。请根据具体需求做进一步开发!
内容由零声教学AI助手提供,问题来源于学员提问