ZBLOG

使用 Qt/C++ 与 Chrome 扩展通信获取用户输入数据 请给我一个能用是示例

要使用 Qt/C++ 与 Chrome 扩展进行通信以获取用户输入数据,通常可以通过以下方式实现:将 Chrome 扩展程序发送的数据传递给一个后端应用程序(如 Qt/C++ 应用),并在这个应用中处理接收到的数据。下面是一个简单的示例,包括 Chrome 扩展和 Qt/C++ 后端代码。

1. 创建 Chrome 扩展

manifest.json

  1. {
  2. "manifest_version": 3,
  3. "name": "Input Logger",
  4. "version": "1.0",
  5. "permissions": ["activeTab"],
  6. "background": {
  7. "service_worker": "background.js"
  8. },
  9. "content_scripts": [
  10. {
  11. "matches": ["<all_urls>"],
  12. "js": ["content.js"]
  13. }
  14. ]
  15. }

background.js

  1. chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  2. if (request.type === 'logInput') {
  3. console.log('Logging input:', request.data);
  4. // 在这里,可以添加代码,将数据发送到你的 Qt 应用
  5. fetch('http://localhost:3000/log', { // 假设 Qt 应用运行在此地址
  6. method: 'POST',
  7. headers: {
  8. 'Content-Type': 'application/json'
  9. },
  10. body: JSON.stringify(request.data)
  11. });
  12. sendResponse({ status: 'success' });
  13. }
  14. });

content.js

  1. document.addEventListener('input', function(event) {
  2. const target = event.target;
  3. // 只记录输入框和文本区域的值
  4. if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
  5. chrome.runtime.sendMessage({
  6. type: 'logInput',
  7. data: {
  8. value: target.value,
  9. url: window.location.href,
  10. hostname: window.location.hostname,
  11. timestamp: new Date().getTime()
  12. }
  13. });
  14. }
  15. });

2. 创建 Qt/C++ 应用

在这个示例中,Qt 应用将启动一个简单的 HTTP 服务器来监听来自 Chrome 扩展的 POST 请求。

CMakeLists.txt (如果使用 CMake)

  1. cmake_minimum_required(VERSION 3.5)
  2. project(InputLogger)
  3. set(CMAKE_CXX_STANDARD 11)
  4. find_package(Qt6 REQUIRED COMPONENTS Core Network)
  5. add_executable(InputLogger main.cpp)
  6. target_link_libraries(InputLogger PRIVATE Qt6::Core Qt6::Network)

main.cpp

  1. #include <QCoreApplication>
  2. #include <QTcpServer>
  3. #include <QTcpSocket>
  4. #include <QJsonDocument>
  5. #include <QJsonObject>
  6. #include <QFile>
  7. #include <QDateTime>
  8. class HttpServer : public QTcpServer {
  9. public:
  10. HttpServer(QObject *parent = nullptr) : QTcpServer(parent) {}
  11. protected:
  12. void incomingConnection(qintptr socketDescriptor) override {
  13. QTcpSocket *socket = new QTcpSocket(this);
  14. socket->setSocketDescriptor(socketDescriptor);
  15. connect(socket, &QTcpSocket::readyRead, this, [this, socket]() {
  16. QByteArray request = socket->readAll();
  17. // 简单解析HTTP请求,只处理POST请求
  18. if (request.startsWith("POST")) {
  19. QByteArray responseData;
  20. int jsonStartIndex = request.indexOf("\r\n\r\n") + 4; // 跳过头部
  21. QByteArray jsonData = request.mid(jsonStartIndex);
  22. // 写入日志文件
  23. logInputData(jsonData);
  24. QString response =
  25. "HTTP/1.1 200 OK\r\n"
  26. "Content-Type: application/json\r\n"
  27. "\r\n";
  28. responseData.append(response);
  29. socket->write(responseData);
  30. socket->flush();
  31. socket->close();
  32. } else {
  33. socket->close(); // 非POST请求直接关闭连接
  34. }
  35. });
  36. connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);
  37. }
  38. private:
  39. void logInputData(const QByteArray &data) {
  40. QFile logFile("input_log.csv");
  41. if (!logFile.open(QIODevice::Append | QIODevice::Text)) return;
  42. QJsonDocument doc = QJsonDocument::fromJson(data);
  43. if (doc.isNull()) return; // JSON解析失败
  44. QJsonObject jsonObj = doc.object();
  45. QString logLine = QString("%1,%2,%3,%4\n")
  46. .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss"))
  47. .arg(jsonObj["hostname"].toString())
  48. .arg(jsonObj["url"].toString())
  49. .arg(jsonObj["value"].toString());
  50. logFile.write(logLine.toUtf8());
  51. logFile.close();
  52. }
  53. };
  54. int main(int argc, char *argv[]) {
  55. QCoreApplication a(argc, argv);
  56. HttpServer server;
  57. if (!server.listen(QHostAddress::Any, 3000)) {
  58. qFatal("Failed to start server");
  59. return -1;
  60. }
  61. qDebug() << "Listening on port:" << server.serverPort();
  62. return a.exec();
  63. }

如何运行

  1. 创建 Chrome 扩展

    • 将以上 manifest.jsonbackground.jscontent.js 文件放入同一目录下,并在该目录下加载扩展(开发者模式)。
  2. 编译并运行 Qt 应用

    • 确保你有安装好 Qt 开发环境,然后根据提供的 CMakeLists.txt 编译项目。
    • 启动你的 Qt 应用,它将监听 localhost 的 3000 端口。
  3. 测试

    • 打开浏览器,访问任何页面,在输入框或文本区域中键入内容。
    • 检查生成的 input_log.csv 文件,以查看捕获到的用户输入数据。

通过以上步骤,你应该能够成功地从 Chrome 扩展捕获用户输入并将其发送到 QT/C++ 后端进行处理。这是一个基本示例,可以根据需求进行进一步扩展和优化。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22859

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?