基于OpenCV的视频图像组态 (11): CEF浏览器与C++通信
来源:互联网 发布:熊猫 知乎 编辑:程序博客网 时间:2024/04/30 14:59
取得页面源码
取得页面源码
CEF按事件来处理,有点麻烦。总共分以下几步:
- 在TChromium->OnLoadEnd事件中检测frame->IsMain(),来判断页面是否已完全载入
- 然后调用TChromium->RetrieveHTML
- 要在TChromium->OnTextResultAvailable事件中取得源码
自己处理一下
void __fastcall TCbwChromiumExplorer::LoadURL(UnicodeString url) {
FUrl = url;
FChromium->LoadURL(url);
FStatus = CBW_CHROMIUM_STAGE_BEGIN_LOAD;
}
void __fastcall TCbwChromiumExplorer::OnLoadEnd(System::TObject* Sender,
const Ucefinterfaces::_di_ICefBrowser browser,
const Ucefinterfaces::_di_ICefFrame frame, int httpStatusCode) {
if(frame->IsMain()) {
FStatus = CBW_CHROMIUM_STAGE_MAINCOMPLETE;
FChromium->RetrieveHTML();
FStatus = CBW_CHROMIUM_STAGE_BEGIN_GETSOURCE;
}
}
void __fastcall TCbwChromiumExplorer::OnTextResultAvailable(System::TObject* Sender, const System::UnicodeString aText) {
if(CBW_CHROMIUM_STAGE_BEGIN_GETSOURCE == FStatus) {
FSourceCode = aText;
FStatus = CBW_CHROMIUM_STAGE_END_GETSOURCE;
}
}
顺便判断一下是否取得了网页
bool __fastcall TCbwChromiumExplorer::GetIsBlank() {
while(FStatus != CBW_CHROMIUM_STAGE_MAINCOMPLETE && FStatus != CBW_CHROMIUM_STAGE_END_GETSOURCE)
THelper::Util::Delay(100);
if(FSourceCode.Length() < 40)
return true;
return false;
}
采用FSourceCode.Length()<40来判断的原因是:如果载入空白,则源码为<html><head></head><body></body></html>,数了一下,字符数目为39。
最后,在调用的时候是这样样的
GlobalChromiumExplorer->LoadURL(CbwOptionForm->LabeledEdit_StartPage->Text);
if(GlobalChromiumExplorer->IsBlank)
GlobalChromiumExplorer->LoadURL(CbwOptionForm->LabeledEdit_StartPage->Text);
当然,还可以更进一步,直接在LoadURL中进行检测,即可简单实现。
JavaSript à C++
在网上找了一下,就一种方法:
参考DELPHI的写法,改造成下面的样子。
class TCbwJS2C : public TObject {
public:
static UnicodeString __fastcall Request();
};
class TCustomRenderProcessHandler : public TCefRenderProcessHandlerOwn {
public:
virtual void __fastcall OnWebKitInitialized();
};
UnicodeString __fastcall TCbwJS2C::Request() {
ShowMessage("Call TCbwJS2C::Request");
}
void TCustomRenderProcessHandler::OnWebKitInitialized() {
TCefRTTIExtension::Register("JS_DRGRAPH", TCbwJS2C);
}
稍微处理一下,得到期望结果。
- 基于OpenCV的视频图像组态 (11): CEF浏览器与C++通信
- 基于OpenCV的视频图像组态 (9):CEF浏览器初步
- 基于OpenCV的视频图像组态 (10): CEF浏览器与图形软件互嵌
- 基于OpenCV的视频图像组态 (1) :时钟
- 基于OpenCV的视频图像组态 (2) :动画总体
- 基于OpenCV的视频图像组态 (4) :劈裂动画效果
- 基于OpenCV的视频图像组态 (5) :擦除动画效果
- 基于OpenCV的视频图像组态 (6): 形状动画效果
- 基于OpenCV的视频图像组态 (7) :轮子动画效果
- 基于OpenCV的视频图像组态 (14):音量控制
- 基于OpenCV的视频图像组态 (3):常见PPT动画1
- 基于OpenCV的视频图像组态 (8) :随机线条动画效果
- 基于OpenCV的视频图像组态 (12): 翻转式由远到近动画效果
- 基于OpenCV的视频图像组态 (13):VLC Player解码帧数据
- 基于Cef的简易浏览器开发(CefSharp)
- 基于Cef的简易浏览器开发(CefSharp)
- 基于c++(opencv)图像处理具有移动视频侦测(出现的基础问题)
- python opencv的视频与图像操作
- 最小二乘、ridge、lasso的概率论原理
- JDBC 写入mysql 中文乱码 及找不到表
- Mac下Apache修改默认站点的目录
- 剑指offer—在O(1)时间删除链表结点(18-1)
- Android开发图片水平旋转180度
- 基于OpenCV的视频图像组态 (11): CEF浏览器与C++通信
- 第五章 深度神经网络为何很难训练
- 使用TortoiseGit上传本地文件到远程服务器
- js在前端获取在本地上传图片的尺寸
- iOS 验证手机号、身份证号的正则
- 在java中,OOA是什么?OOD是什么?OOP是什么?
- 经典线程同步 互斥量Mutex
- 为什么在神经网络中要使用交叉熵而不是均方差作为损失函数
- s5pv210-Linux驱动之ME3760