Der erste Typ: Ruf über execScript. Obwohl diese Methode einfach zu bedienen ist, kann sie den Rückgabewert nicht erhalten.
M_SPHTMLDOC-> get_parentwindow (& m_phtmlWindow); Variante ret; ret.vt = vt_empy; bstr = sscript.AllocSysString (); Bret = m_phtmlwindow-> execscript (bstr, l "javascript"; Cstring (ret);
Der zweite Typ: Verwenden Sie zuerst GetIdsofnames, um den Skriptfunktionsnamen zu finden und ihn dann aufzurufen. Diese Methode kann das Ergebnis zurückgeben und einen Rückgabewert haben. Es ist jedoch unmöglich, Systemfunktionen von JS wie Eval zu rufen.
Bool cdhtmldlgwindow :: calljscript (const cstring strfunc, const cstringArray & paramArray, ccomvariant* pvarresult) {comptr spscript; if (null == M_SPHTMLDOC) {return false; } Hresult hr; HR = M_SPHTMLDOC-> get_script (& spscript); if (! erfolgreich (hr)) {return false; } Ccombstr bstrMember (strfunc); Dispid Dispid = null; hr = spscript-> getIdSofnames (iid_null, & bstrMember, 1, locale_system_default, & Dispid); if (fehlgeschlagen (hr)) {return false; } const int arraySize = paramArray.getSize (); Dispparams dispparams; memset (& dispparams, 0, sizeof dispparams); dispparams.cargs = arraysize; dispparams.rgvarg = neue Variante [dispparams.cargs]; für (int i = 0; i <arraysize; i ++) {ccombstr bstr = paramArray.getat (ArraySize - 1 - i); // Back Reading bstr.copyto (& dispparams.rgvarg [i] .bstrval); dispparams.rgvarg [i] .vt = vt_bstr; } dispparams.cnamedargs = 0; Excepinfo exceptionInfo; memset (& excepinfo, 0, sizeof exceptInfo); Comvariant Varesult; Uint nargerr = (uint) -1; // Initialisieren Sie in ungültiges arg hr = spscript-> invoke (Dispid, iid_null, 0, isspatch_method & dispparams & varesult & execepinfo, & nargerr); löschen [] dispparams.rgvarg; if (fehlgeschlagen (hr)) {return false; } *pvarresult = varesult; true zurück;}Wenn Sie es tatsächlich verwenden, haben Sie möglicherweise zuerst auf eine Seite zugegriffen. Nehmen Sie dann einige JS -Anrufe auf diese Seite in VC und rufen Sie das Ergebnis ab. Es ist möglich, dass die von diesem JS aufgerufene Funktion auf dieser Seite nicht verfügbar ist. Im Allgemeinen können Sie die Form von Eval (einige JS -Anweisungen) verwenden, um Funktionen aufzurufen, die nicht auf der Seite enthalten sind, aber jetzt unterstützt keine der oben genannten Methoden die Bewertung.
Der dritte Typ: Holen Sie sich den aktuellen Dokumentkontext über IscriptControl und rufen Sie dann die Operation iscriptControl :: RAW_EVAL auf. (Sie können nur RAW_EVAL verwenden. Verwenden der Evaly -Methode fordert, dass keine Berechtigung vorliegt.)
Definieren Sie zuerst eine: iscriptControlptr und rufen Sie dann M_SPHTMLDOC-> get_parentwindow (& m_phtmlWindow) auf;
IscriptControlptr-> addObject ("Fenster", m_phtmlWindow, variant_true);
Der dritte Typ erfordert importieren "msscript.ocx" importieren
Die obigen Methoden (empfohlen) von VC Calling JavaScript sind alle Inhalte, die ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.