使用QAxWidget调用IE组件怎么与IE进行交互

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用QAxWidget调用IE组件怎么与IE进行交互相关的知识,希望对你有一定的参考价值。

Widget::Widget(QWidget *parent) :
QWidget(parent)

webWidget = new QAxWidget;
webWidget->setControl(QString::fromUtf8("8856F961-340A-11D0-A96B-00C04FD705A2"));
loadNavigate();
webWidget->setObjectName(QString::fromUtf8("webWidget"));
webWidget->setFocusPolicy(Qt::StrongFocus);
webWidget->setProperty("DisplayAlerts",false); //不显示任何警告信息。
webWidget->setProperty("DisplayScrollBars",false); // 显示滚动条
connect(webWidget,SIGNAL(NavigateComplete2(IDispatch*,QVariant& )),
this,SLOT(sltNavigateComplete2(IDispatch*,QVariant&)));

QPushButton *reloadButton = new QPushButton("Reload");
connect(reloadButton,SIGNAL(clicked()),this,SLOT(sltReloadButtonClick()));
QPushButton *testButton = new QPushButton("Draw");
connect(testButton,SIGNAL(clicked()),this,SLOT(sltTestButtonClick()));
QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch();
buttonLayout->addWidget(reloadButton);
buttonLayout->addStretch();
buttonLayout->addWidget(testButton);
buttonLayout->addStretch();

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(webWidget);
mainLayout->addLayout(buttonLayout);

this->setLayout(mainLayout);
this->resize(1000,500);

下面两个地址为本地地图,测试可用
void Widget::loadNavigate()

webWidget->dynamicCall("Navigate(const QString&)","file:///E:/MyProjects/MWebBrowser/MWebBrowser/2.html");
//webWidget->dynamicCall("Navigate(const QString&)","http://192.168.2.163/gisflash/maintest.jsp");
//webWidget->dynamicCall("Navigate(const QString&)","http://localhost:9080/centranGIS/mapJsp.html");

void Widget::sltTestButtonClick()

QAxObject *document = webWidget->querySubObject("Document");
QAxObject *parentWindow = document->querySubObject("parentWindow");
parentWindow->dynamicCall("execScript(QString,QString)","Test()","javascript");

/*
// 以下是地图加点的操作
QString js;
js = "DrawMarker('\"id\":1,\"label\":\"4444\",\"lat\":39.945824060,\"lon\":116.28546870,\"type\":1')";
parentWindow->dynamicCall("execScript(QString,QString)",js,"JavaScript");
*/

/*
// 获取webWidget的文档说明
QString doc = webWidget->generateDocumentation();
QFile outFile("E:/MyProjects/MWebBrowser/webWidget.html");
outFile.open(QIODevice::WriteOnly|QIODevice::Append);
QTextStream ts(&outFile);
ts<<doc<<endl;
*/


void Widget::sltNavigateComplete2(IDispatch *pDisp, QVariant &URL)

qDebug() << "hello";

void Widget::sltReloadButtonClick()

loadNavigate();


2.html文件
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>Document</title>
<script type="text/javascript">

function Test()
alert("你调用了全局函数Test");

</script>
</head>
<body>

<input type="button" value="click me" onclick="Test();" />

</body>
</html>
参考技术A 够偏门的,这个得看ActiveX控件提供的接口了
用QtWebKit吧,这个足够强大

自己试试啊
qt封装com控件被如IE或C#调用是没问题的
已经做过的

如何让ie调用chrome内核

参考技术A ie和chrome来自不同公司,ie无法调用chrome内核,听说新版Edge可以调用chrome内核。国产浏览器大多是ie和chrome双内核的。 参考技术B 不能
ie是Internet Explorer的简称,是美国微软公司推出的一款网页浏览器。中文直译为“网络探路者”,但在IE7以后官方便直接俗称"IE浏览器"。IE的功能大致分为:
1、组件对象模型
组件对象模型(COM) 技术在Internet Explorer里被广为使用。它允许第三方厂商通过浏览器帮助对象 (BHO)添加功能;并且允许网站通过ActiveX提供丰富的内容。由于这些对象能拥有与浏览器本身一样的权限(在某种情形之下),对于安全就有很大的担心。最新版的Internet Explorer提供了一个加载项管理器以控制ActiveX控件和浏览器帮助对象,以及一个“无加载项”版本(在所有程序/附件/系统工具之下)。

2、安全架构
Internet Explorer使用一个基于区域的安全架构,意思是说网站按特写的条件组织在一起。它允许对大量的功能进行限制,也允许只对指定功能进行限制。
对浏览器的补丁和更新通过Windows更新服务以及自动更新定期发布以供使用。
最新版的Internet Explorer提供了一个下载监视器和安装监视器,允许用户分两步选择是否下载和安装可执行程序。这可以防止恶意软件被安装。用Internet Explorer下载的可执行文件被操作系统标为潜在的不安全因素,每次都会要求用户确认他们是否想执行该程序,直到用户确认该文件为“安全”为止。

3、群组原则
Internet Explorer可通过组策略进行完全配置。Windows服务器域管理员可以应用并强制一系列设定以改变用户界面(例如禁止某些菜单项和独立的配置选项),以及限制安全功能(例如下载文件),零配置,按站点设置,ActiveX控件行为,等等。策略设置可以按每用户和每机器为基础进行设置。

4、网页标准
Internet Explorer使用了Trident排版引擎,几乎完整支持HTML 4.01,CSS Level 1、XML 1.0和DOM Level 1,只是有一些排版错误。它亦部分支持CSS Level 2 和DOM Level 2。它自带的XML解释器支持XHTML,但是微软从IE 5.0以后取消了这一支持,使它变得难以访问。如其它浏览器一样,当MIME类型标识为“text/html”,它能解释为XHTML。当MIME类型标识为“application/xml”和“text/xml”时,它也能解释把XHTML解释为XML,但需要一个小的XSLT度量来重新启用XML对XHTML的支持。当把它定义为偏好类型如“application/xhtml+xml”时,它假装不理解XHTML,相反把它当成一种不了解的供下载的文件类型来对待。
Internet Explorer依靠DOCTYPE判断一个网页应该按老版本渲染还是按W3C标准渲染。根据MSXML的版本不同,它可以完全支持XSLT1.0或1998年12月的XSL草案。Internet Explorer有一个自己的ECMAScript变体,名为JScript。

5、元件
Internet Explorer引进了一系列专利的网页标准延伸,包括HTML、CSS和DOM。这令到一些网站只可被Internet Explorer正常显示。

6、安全性
Internet Explorer 最主要都是被批评其安全性。很多间谍软件,广告软件及电脑病毒横行网络是因为 Internet Explorer 的安全漏洞及安全结构有裂缝。有时浏览一些恶意网站会被恶意自动安装。这被名为“强制安装”:在 ActiveX 的安全描述中填写虚假的描述以遮盖软件的实际用途,误导使用者安装一些恶意软件。
当然,Internet Explorer 不只有一个用户有问题,而使大部份的使用者。它们影响很多电脑显示安全问题无处不在。微软没有责任去修补安全漏洞及发布修补档,除 Internet Explorer 的安全漏洞外,微软使用很长的时间去修补漏洞。在一些例子中,恶意网站制作者在微软发布修正档前利用漏洞去攻击使用者。

7、网页标准支持
其他的批评大多是来自技术专家用户、网站开发者和建基于Internet Explorer而开发的软件应用程序的开发者,他们十分担心Internet Explorer对开放标准的支持,因为Internet Explorer通常使用专利的网页标准延伸元件来达至相似的功能。
Internet Explorer对一些标准化技术都有一定程度上的支持,但亦有很多执行上的差距和兼容性的故障 — 一些较为轻微,一些没有 — 这导致技术开发者的批评日益增加。批评增加的情况,在很大程度上是归因于Internet Explorer的竞争对手相对地已提供完全的技术支持,标准规格(Standards-compliant)的应用亦越来越广泛起来。
正因为Internet Explorer在全球广为应用,网络开发者们在寻求跨平台且功能强大的代码时常常会发现Internet Explorer的漏洞、私有的功能集合和对标准支持的不完善成为了他们最大的绊脚石。
通常来说,网络开发者们在编写代码时应该具有跨平台性,因此能在所有主要浏览器上运行的代码总是必不可少的。Internet Explorer的技术很封闭,且只支持少数的CSS、HTML和 DOM特性(而且很多实现都有问题)。竞争对手Firefox和Opera不仅在这方面领先于Internet Explorer,且它们也具备原生的XHTML支持。正因如此,Internet Explorer始终未能通过验证CSS标准支持程度的Acid2测试。另一个Internet Explorer的巨大缺点源自PNG格式,这一问题仅在Internet Explorer 7中得到了解决。尽管如此,Internet Explorer 7在访问含有透明PNG的网页时性能将大大降低。
ie运用独立内核存在,暂不支持使用自身之外的内核。

Google Chrome,又称Google浏览器,是一个由Google(谷歌)公司开发的网页浏览器。该浏览器是基于其他开源软件所撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。软件的名称是来自于称作Chrome的网络浏览器图形使用者界面(GUI)。
插件通常并没有统一的标准,且无法像标签页般沙盒化。这些通常需要运行在浏览器本身的安全等级或更高的等级。为了降低被攻击的风险,插件是独立运行的。从5.0版本起,“Google Chrome”内置Adobe Flash Player以确保使用的为最新版本降低被攻击的风险。其后在9.0版本将Flash播放器内置在沙盒中独立运行。这项技术是Chrome安全性进步的一座里程碑。对Windows XP用户特别重要,因为它是平台上唯一提供Flash嵌入沙盒运行的浏览器。从8.0版本起,“Google Chrome”内置在沙盒中独立运行的PDF阅读器。

以上是关于使用QAxWidget调用IE组件怎么与IE进行交互的主要内容,如果未能解决你的问题,请参考以下文章

如何解决bootstrap与ie不兼容问题

ie11卸载组件存储已损坏怎么办

如何让ie调用chrome内核

怎么在html中运行exe程序

如何安装ie11 怎样安装ie11

C#的网页控件WebBrowser如何指定内核为IE8?