解决方案2:使用IE控件作为浏览器
myWebBrowser = new QAxWidget(this); //this 是main window widget, myWebBrowser 是它的成员变量
myWebBrowser->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}")); //设置IE控件
myWebBrowser->setObjectName(QString::fromUtf8("WebBrowser"));
myWebBrowser->setFocusPolicy(Qt::StrongFocus);
setCentralWidget(myWebBrowser);
myWebBrowser->dynamicCall("Navigate(const QString&)", xxx); //打开一个页面
,xxx是你的url或本地html路径
//. . . 等页面加载好后
,使用C++代码调用JS代码
IWebBrowser2 *webBrowser = 0;
myWebBrowser->queryInterface(IID_IWebBrowser2, (void **)&webBrowser);
if (webBrowser) {
CComPtr<IDispatch> spDisp = NULL;
webBrowser->get_Document(&spDisp);
myWebPage.SetDocument(spDisp); //注意,myWebPage的类型是CWebPage,关于它的定义,稍后有介绍
myWebPage.CallJScript("f2", "abc"); //调用页面中的f2函数,它有一个参数,这里填“abc”
webBrowser->Release();
}
//. . . CWebPage类的定义(粘贴的代码有点长,但是其实读起来很简单的)
头文件(代码片段):
class CWebPage
{
public:
CWebPage();
virtual ~CWebPage();
bool SetDocument(IDispatch* pDisp);
LPDISPATCH GetHtmlDocument() const;
const string GetLastError() const;
bool GetJScript(CComPtr<IDispatch>& spDisp);
bool GetJScripts(CComPtr<IHTMLElementCollection>& spColl);
bool CallJScript(const string strFunc,CComVariant* pVarResult = NULL);
bool CallJScript(const string strFunc,const string strArg1,CComVariant* pVarResult = NULL);
bool CallJScript(const string strFunc,const vector<string>& paramArray,CComVariant* pVarResult = NULL); //关键看这个函数
protected:
void ShowError(LPCSTR lpszText);
protected:
CComPtr<IHTMLDocument2> m_spDoc;
string m_strError;
};
CPP文件(代码片段):
bool CWebPage::SetDocument(IDispatch* pDisp)
{
CHECK_POINTER(pDisp);
m_spDoc = NULL;
CComPtr<IDispatch> spDisp = pDisp;
HRESULT hr = spDisp->QueryInterface(IID_IHTMLDocument2,(void**)&m_spDoc);
if(FAILED(hr))
{
ShowError("Failed to get H