Qt调用Windows Webbrowser控件,调用JS方法

    xiaoxiao2021-12-14  20

    说明:

    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 hInstance,

                         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”编译命令;

    转载请注明原文地址: https://ju.6miu.com/read-963065.html

    最新回复(0)