El primer tipo: llamar a través de ExecScript. Aunque este método es fácil de operar, no puede obtener el valor de retorno.
m_sphtmldoc-> get_parentwindow (& m_phtmlwindow); variant ret; ret.vt = vt_empty; bstr bstr = sscript.allocSySsSsString (); bret = m_phtmlwindow-> ejecutscript (bstr, l "javaScript", & retits); :: sysfreestrring (sret (bSTR); CString (Ret);
El segundo tipo: primero use getIdsofnames para encontrar el nombre de la función de script y luego llamarlo. Este método puede devolver el resultado y tener un valor de retorno. Pero es imposible llamar a las funciones del sistema de JS, como Eval.
Bool cdhtmldlgwindow :: callJScript (const cstring strfunc, const cStringArray & ParamArray, ccomvariant* pvArResult) {ccomptr spscript; if (null == m_sphtmldoc) {return false; } HRESULT HR; hr = m_sphtmldoc-> get_script (& spscript); if (! Succeed (hr)) {return false; } Ccombstr bstrmember (strfunc); Dispid dispid = null; hr = spscript-> getIdsofnames (iid_null, & bstrmember, 1, locale_system_default, & dispid); if (fallado (hr)) {return false; } const int Arraysize = ParlarRray.getSize (); DispParams Disparams; memset (& dispRarams, 0, sizeOf dispParams); dispParams.cargs = Arraysize; dispParams.rgvarg = nueva variante [dispParams.cargs]; for (int i = 0; i <arraysize; i ++) {ccombstr bstr = parlarRArray.getat (arraysize - 1 - i); // Realización de retroceso bstr.CopyTo (& dispParams.rgvarg [i] .bstrval); dispParams.rgvarg [i] .vt = vt_bstr; } dispParams.cnamedargs = 0; Excepinfo ExceptionInfo; memset (& Excepinfo, 0, sizeOf ExceptionInfo); Ccomvariant varesult; Uint narGerr = (uint) -1; // Inicializar a un arg inválido HR = spScript-> Invoke (dispid, iid_null, 0, desplazamiento_method, & dispParams, & varesult, & excepinfo, & narGerr); eliminar [] dispRarams.rgvarg; if (fallado (hr)) {return false; } *pvarResult = varesult; devolver verdadero;}Cuando realmente lo usa, es posible que haya accedido a una página primero. Luego, haga algunas llamadas JS a esta página en VC y recupere el resultado. Es posible que la función llamada por este JS no esté disponible en esta página. En general, puede usar la forma de evaluación (algunas declaraciones JS) para llamar a las funciones que no están en la página, pero ahora ninguno de los métodos anteriores admite Eval.
El tercer tipo: Obtenga el contexto del documento actual a través de IscriptControl y luego llame a la operación iScriptControl :: RAW_EVAL. (Solo puede usar RAW_EVAL. Usando el método EVIS, solicitará que no hay permiso).
Primero defina uno: iscriptControlPtr, y luego llame a m_sphtmldoc-> get_parentwindow (& m_phtmlwindow);
IscriptControlPtr-> addObject ("ventana", m_phtmlwindow, variant_true);
El tercer tipo requiere importar "msscript.ocx"
Los varios métodos anteriores (recomendados) de VC que llaman a JavaScript son todos los contenidos que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.