Qt呼叫Windows Webbrowser控制元件,呼叫JS方法
說明:
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”編譯命令;