BOOL SimpleBrowser::ExecuteJavascript(LPCTSTR script) { IHTMLDocument2* pDocument = GetDocument(); if (pDocument == NULL) return FALSE; BOOL bRet = FALSE; IHTMLWindow2* pHTMLWindow = NULL; if (pDocument->get_parentWindow(&pHTMLWindow) == S_OK)// execCommand(_T("testFunction()"), TRUE, value, &ret)) { VARIANT vEmpty = {0}; CComBSTR bstrFunction = script; CComBSTR bstrLanguage = L"javascript"; HRESULT hr = pHTMLWindow->execScript(bstrFunction, bstrLanguage, &vEmpty); bRet = (hr == S_OK); pHTMLWindow->Release(); } pDocument->Release(); return bRet; }
//--------------------------------------------------------------------------- void __fastcall TGoogleMapView::ExecFunc(AnsiString func) { IHTMLWindow2 *win; IHTMLDocument2 *doc=NULL; VARIANT var; HRESULT hr; wchar_t func_w[1024]={0}; if (!WebBrowser->Document) return; WebBrowser->Document->QueryInterface(IID_IHTMLDocument2,(void **)&doc); if (!doc) return; hr=doc->get_parentWindow(&win); doc->Release(); if (hr!=S_OK) return; VariantInit(&var); ::MultiByteToWideChar(CP_UTF8,0,func.c_str(),-1,func_w,512); hr=win->execScript(func_w,L"javascript",&var); VariantClear(&var); }
void run( const char *script ){ IDispatch *disp; IHTMLDocument2 *doc; IHTMLWindow2 *win; HRESULT res; VARIANT result; wchar_t *buf; int sz=MultiByteToWideChar( CP_ACP,0,script,-1,0,0 ); buf=new wchar_t[sz]; MultiByteToWideChar( CP_ACP,0,script,-1,buf,sz ); BSTR bstr=SysAllocString(buf); res=iBrowser->get_Document(&disp); if (res==S_OK) { res=disp->QueryInterface(IID_IHTMLDocument2,(void**)&doc); res=doc->get_parentWindow(&win); result.vt=VT_EMPTY; res=win->execScript(bstr,0,&result); } SysFreeString(bstr); delete[] buf; }
HRESULT HtmlDlg::OnALinkClickedMethod(IHTMLElement *pElement) { CString attr( _T("href") ); CString href; if( !GetHtmlAttrValue( pElement, attr, href ) ) { MessageBox(_T("href error")); } MessageBox( href ); { //复选框 CComPtr<IHTMLInputElement> CkbOpen; GetElementInterface(_T("vehicle_id"), IID_IHTMLInputElement, (void **) &CkbOpen); if (CkbOpen) { VARIANT_BOOL bc=true; CkbOpen->put_checked(bc); VARIANT_BOOL b; CkbOpen->get_checked(&b); CString csb; int i = b; csb.Format(_T("%d"), i); MessageBox( csb ); } CComPtr<IHTMLElement> spP1; HRESULT hr = S_OK; CString csId = _T("car"); hr = GetElementInterface( csId, &spP1 ); if( S_OK == hr ) { CString csAttr=_T( "value" ); BSTR bStr = csAttr.AllocSysString(); VARIANT v; //spP1->get_innerHTML(&bStr); spP1->getAttribute( bStr,0, &v ); CString csShow( v.bstrVal ); MessageBox( csShow ); //spP1->put_innerHTML(bstrTable); ::VariantClear( &v ); ::SysFreeString( bStr ); } } //call js { CString csFunc = _T("showAlert()"); BSTR bStr = csFunc.AllocSysString(); VARIANT v; v.vt = VT_EMPTY; IHTMLWindow2* pWindow; HRESULT hr = m_spHtmlDoc->get_parentWindow(&pWindow); hr = pWindow->execScript( bStr, L"javascript", &v ); ::VariantClear( &v ); ::SysFreeString( bStr ); } //GotoUrl( _T("http://www.baidu.com/") ); return TRUE; }
void ReadiumJSApi::loadJS(QString jScript) { #if 0 QAxObject* doc = WebBrowser->querySubObject("Document()"); //IDispatch* Disp; IDispatch* winDoc = NULL; IHTMLDocument2* document = NULL; //332C4425-26CB-11D0-B483-00C04FD90119 IHTMLDocument2 //25336920-03F9-11CF-8FD0-00AA00686F13 HTMLDocument doc->queryInterface(QUuid("{332C4425-26CB-11D0-B483-00C04FD90119}"), (void**)(&winDoc)); if (winDoc) { document = NULL; winDoc->QueryInterface(IID_IHTMLDocument2, (void**)&document); IHTMLWindow2 *window = NULL; document->get_parentWindow(&window); QAxObject* documentWin = new QAxObject(document, WebBrowser); QAxObject* jScriptWin = new QAxObject(window, WebBrowser); //connect(jScriptWin, SIGNAL(exception(int, QString, QString, QString)), this, SLOT(printWinException(int, QString, QString, QString))); //jScriptInitialized = true; QVariantList params; //params.append(javaScript); //params.append("alert('Hi')"); params.append("JScript"); //QVariant result = jScriptWin->dynamicCall("execScript(QString, QString)", params); VARIANT var; QString strCode = jScript; QString stringLang("JScript"); BSTR bstrCode = SysAllocString(strCode.toStdWString().c_str()); BSTR bstrLang = SysAllocString(stringLang.toStdWString().c_str()); window->execScript(bstrCode, bstrLang, &var); SysFreeString(bstrCode); SysFreeString(bstrLang); document->Release(); winDoc->Release(); } else { //qDebug() << "COULD NOT GET DOCUMENT OBJECT! Aborting"; } #else if (WebBrowser) { CComPtr<IDispatch> pDispDoc = WebBrowser->get_Document(); CComQIPtr<IHTMLDocument2> pHtmlDoc(pDispDoc); if (pHtmlDoc) { CComPtr<IHTMLWindow2> pMainWin2; pHtmlDoc->get_parentWindow(&pMainWin2); if (pMainWin2) { CComVariant vtRv(0); CComBSTR bsCode = jScript.c_str() /*L"alert (\" Hi !\");"*/, bsLang = L"JavaScript"; HRESULT hr = pMainWin2->execScript(bsCode, bsLang, &vtRv); if (!SUCCEEDED(hr)) { //AfxMessageBox(L"Error executing script"); } } } } //QAxObject* qv = WebBrowser->querySubObject("Document()"); //QAxObject* qv1 = qv->querySubObject("parentWindow"); //QString script = "(function(){" + jScript + "})()"; //qDebug() << script; /*{ QString filename = "Data.txt"; QFile file(filename); if (file.open(QIODevice::ReadWrite)) { QTextStream stream(&file); stream << script << endl; } file.close(); }*/ //QVariantList params; //params.append("alert('hello')"); //params.append("JScript"); //QVariant result = qv1->dynamicCall("execScript(QString, QString)", params); //qv1->dynamicCall("execScript(Qstring)", script, "javascript"); //qv1->dynamicCall("execScript(Qstring, QString)", script, "JScript"); //, "javascript" //qv1->deleteLater(); //qv->deleteLater(); //Log.i(TAG, "loadJS: "+jScript); //mJSLoader.loadJS("javascript:(function(){" + jScript + "})()"); //pWebBrowser->dynamicCall(script); #endif }