本篇简介
本篇的小目标:
借助QWebChannel,实现浏览器与页面的通信交互
上一节中我们实现了浏览器的基本功能和一个简易的调试界面。>>点这里回顾上节内容
本节将尝试在此基础上实现浏览器与所加载页面的相互通信。既然是相互通信,自然包含两个方向:
页面向浏览器发送消息
浏览器向页面发送消息
页面向浏览器发送消息
为了实现页面向浏览器发送消息,需要在一定程度上实现在页面中访问Qt对象。Qt官方的推荐方式是使用QWebChannel。借助官方提供的qwebchannel.js脚本,可以很方便地实现页面对Qt对象的调用,同时便于实现C++和html/js的解耦,方便使用不同技术栈的开发人员的分工。
注:qwebchannel.js在Qt发布版的文件夹下可以找到。
Qt这边,为了方便后续开发,我们先设计一个JsContext类,声明如下:
class JsContext : public QObject
{
Q_OBJECT
public:
explicit JsContext(QObject *parent = nullptr);
signals:
void recvdMsg(const QString& msg);
public:
// 向页面发送消息
void sendMsg(QWebEnginePage* page, const QString& msg);
public slots:
// 接收到页面发送来的消息
void onMsg(co