Qt调用Windows Webbrowser控件,调用JS方法
2016-12-02 11:44
465 查看
说明:
Qt版本为4.7.4
编译工具为VS2008
一.需要包含的头文件
#include"ExDisp.h"
#include"comutil.h"
#include"atlcomcli.h"
#include "Mshtml.h"
库文件名: comsuppw.lib comsupp.lib
二.代码调用
ui.axWidget->setObjectName(QString::fromLocal8Bit("WebBrowser"));
ui.axWidget->setFocusPolicy(Qt::StrongFocus);
ui.axWidget->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}"))
ui.axWidget->setContentsMargins(0,0, 0, 0);
ui.axWidget->setProperty("DisplayScrollBars",
true);
ui.axWidget->queryInterface(IID_IWebBrowser2,(void **)&webBrowser);
//这个是禁止报JS错误的
if(webBrowser)
{
VARIANT_BOOLbValue = true;
webBrowser->put_Silent(bValue);
webBrowser->Release();
}
//打开要加载的网页
QString_url("http://192.168.1.69:8080/FFplayer.html");
_variant_tstrVar(_url.toLocal8Bit().data());
BSTRbstrText = strVar.bstrVal;
webBrowser->Navigate(bstrText,NULL, NULL, NULL, NULL);
//调用JS方法的代码片段
CComQIPtr<IHTMLDocument2>_spDoc;
webBrowser->get_Document((IDispatch**)(&_spDoc));
if(_spDoc== NULL)
return;
CComDispatchDriver_spScript;
_spDoc->get_Script(&_spScript);
CComVariant_var1(_playurl.toLocal8Bit().data()), _varRet;
_spScript.Invoke1(L"svLivePlay",&_var1, &_varRet);
三.需要注意的问题
1.需要使用MFC库,最好是静态加载;
2.修改main的入口函数,防止报MFC的错误,如下所示:
int APIENTRY
_tWinMain(HINSTANCE
hInsta
9b10
nce,
HINSTANCEhPrevInstance,
LPTSTR
lpCmdLine,
int
nCmdShow)
{
//应用MFC库,防止(在静态库中使用MFC)
静态编译无法通过
int
nRetCode= 0;
if (!AfxWinInit(::GetModuleHandle(NULL),NULL,
::GetCommandLine(),0))
{
// TODO:
更改错误代码以符合您的需要
_tprintf(_T("错误: MFC
初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO:
在此处为应用程序的行为编写代码。
}
//创建对象需要的参数为__argc,__argv
QtSingleApplication
a(__argc, __argv);
if(a.isRunning())
{
return -1;
}
//……
}
3.需要包含stdafx.h, targetver.h头文件;
4.如果提示库冲突错误,在命令行里输入“/FORCE:MULTIPLE”编译命令;
Qt版本为4.7.4
编译工具为VS2008
一.需要包含的头文件
#include"ExDisp.h"
#include"comutil.h"
#include"atlcomcli.h"
#include "Mshtml.h"
库文件名: comsuppw.lib comsupp.lib
二.代码调用
ui.axWidget->setObjectName(QString::fromLocal8Bit("WebBrowser"));
ui.axWidget->setFocusPolicy(Qt::StrongFocus);
ui.axWidget->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}"))
ui.axWidget->setContentsMargins(0,0, 0, 0);
ui.axWidget->setProperty("DisplayScrollBars",
true);
ui.axWidget->queryInterface(IID_IWebBrowser2,(void **)&webBrowser);
//这个是禁止报JS错误的
if(webBrowser)
{
VARIANT_BOOLbValue = true;
webBrowser->put_Silent(bValue);
webBrowser->Release();
}
//打开要加载的网页
QString_url("http://192.168.1.69:8080/FFplayer.html");
_variant_tstrVar(_url.toLocal8Bit().data());
BSTRbstrText = strVar.bstrVal;
webBrowser->Navigate(bstrText,NULL, NULL, NULL, NULL);
//调用JS方法的代码片段
CComQIPtr<IHTMLDocument2>_spDoc;
webBrowser->get_Document((IDispatch**)(&_spDoc));
if(_spDoc== NULL)
return;
CComDispatchDriver_spScript;
_spDoc->get_Script(&_spScript);
CComVariant_var1(_playurl.toLocal8Bit().data()), _varRet;
_spScript.Invoke1(L"svLivePlay",&_var1, &_varRet);
三.需要注意的问题
1.需要使用MFC库,最好是静态加载;
2.修改main的入口函数,防止报MFC的错误,如下所示:
int APIENTRY
_tWinMain(HINSTANCE
hInsta
9b10
nce,
HINSTANCEhPrevInstance,
LPTSTR
lpCmdLine,
int
nCmdShow)
{
//应用MFC库,防止(在静态库中使用MFC)
静态编译无法通过
int
nRetCode= 0;
if (!AfxWinInit(::GetModuleHandle(NULL),NULL,
::GetCommandLine(),0))
{
// TODO:
更改错误代码以符合您的需要
_tprintf(_T("错误: MFC
初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO:
在此处为应用程序的行为编写代码。
}
//创建对象需要的参数为__argc,__argv
QtSingleApplication
a(__argc, __argv);
if(a.isRunning())
{
return -1;
}
//……
}
3.需要包含stdafx.h, targetver.h头文件;
4.如果提示库冲突错误,在命令行里输入“/FORCE:MULTIPLE”编译命令;
相关文章推荐
- 在WebBrowser控件使用js调用C#方法
- winform窗体中调用Webbrowser控件里的JS方法和
- WebBrowser控件中JS调用C#方法
- 【COM范例】WM上获取短信内容,AcitiveX控件调用页面JS方法
- js调用.NET服务器控件及C#后台方法
- Winform WebBrowser自定义方法供js调用总结
- .NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出“指定的转换无效”异常的原因
- windows下Qt 调用外部exe的方法
- 对 Windows 窗体控件进行线程安全调用的方法
- windows跨线程调用控件的方法
- WinForm中嵌入WebBrowser,并且支持C#和JS方法的相互调用
- .NET客户端js调用服务器端控件的方法
- ASP.NET 调用打印机控件的方法 IEWebBrowser这个组件
- js 如何调用Windows自带的配色控件
- 在WebBrowser中通过JS调用C#方法(转)
- WebBrowser控件的方法及IE7不能调用的解决方法
- webBrowser中为html控件赋值及调用js[vb.net]
- Winform WebBrowser自定义方法供js调用总结
- js调用ActiveX(ocx)控件方法
- C#Winform中WebBrowser控件的特性和详细调用方法