您的位置:首页 > 编程语言 > Qt开发

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”编译命令;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: