工作需要同时内嵌Chrome、IE,相较于IE,CEF开源简单多了,调用IE费了点功夫研究。
重点记述 在 qt 中,实现 js 与 客户端之前互动相互调用,代码资料根据网站整理并测试
内嵌调用IE 需要引入 QT += axcontainer (具体调用 IE 略过)
1、qt 调用 js,该调用方法比较简单
QAxObject *document = ui->axWidget->querySubObject("Document");
if(!document)
return ;
QAxObject *parentWindow = document->querySubObject("parentWindow");
{
QAxObject obj(&m_call, this);
parentWindow->dynamicCall("SaveCppObject (QAxObject*)", obj.asVariant());// 见 qt 帮助文档, 详细介绍了支持的类型
}
2、js 调用 qt,目前整理并测试的有三种方式
- 先通过 qt 调用 js 方法,将 IDispatch 指针对象,传入 js 中,js保存并可以在后续引用(问题:当页面刷新,需要在刷新方法内再次 传入 IDispatch 指针对象)
- js 主动调用 qt,通过 window.external.GetProcessID() 方式调用
- 写 activeX ,js 中 通过<object>对象调用(经测试后发现,