Первый тип: вызов через ExecScript. Хотя этот метод легко работать, он не может получить возвращаемое значение.
m_sphtmldoc-> get_parentwindow (& m_phtmlwindow); variant ret; ret.vt = vt_empty; bstr bstr = sscript.allocsysstring (); bret = m_phtmlwindow-> execcript (bstr, l "javascript", & ret); Cstring (ret);
Второй тип: сначала используйте GetidsOfNames, чтобы найти имя функции сценария, а затем вызовать его. Этот метод может вернуть результат и иметь возвратное значение. Но невозможно вызвать системные функции JS, такие как 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 (! сменил (hr)) {return false; } Ccombstr bstrmember (strfunc); Dispid dispid = null; hr = spscript-> getidsofnames (iid_null, & bstrmember, 1, locale_system_default, & dispid); if (whifle (hr)) {return false; } const int arraysize = paramarray.getSize (); Диспедамы дисков; MEMSET (& DISPPARAMS, 0, SizeOf DISPPARAMS); dispparams.cargs = массивы; dispparams.rgvarg = новый вариант [dispparams.cargs]; for (int i = 0; i <arraysize; i ++) {ccombstr bstr = paramarray.getat (массивов - 1 - i); // обратно чтение 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; // Инициализировать до недействительного arg hr = spscript-> invoke (dispid, iid_null, 0, dispatch_method, & dispparams, & varesult, & excepinfo, & nargerr); Удалить [] dispparams.rgvarg; if (whifle (hr)) {return false; } *pvarresult = varesult; вернуть True;}Когда на самом деле его используют, вы могли бы сначала получить доступ к странице. Затем сделайте некоторые вызовы JS на эту страницу в VC и получите результат. Возможно, что функция, вызванная этим JS, недоступна на этой странице. Как правило, вы можете использовать форму eval (некоторые операторы JS) для вызова функций, которых нет на странице, но теперь ни один из вышеуказанных методов не поддерживает Eval.
Третий тип: Получите текущий контекст документа через iscriptControl, а затем вызовите операцию iscriptControl :: RAW_EVAL. (Вы можете использовать только RAW_EVAL. Использование метода EVAL заставят, чтобы разрешение не было.)
Сначала определите один: iscriptControlptr, а затем вызовите m_sphtmldoc-> get_parentwindow (& m_phtmlwindow);
IscriptControlptr-> addObject ("window", m_phtmlwindow, variant_true);
Третий тип требует импорта "msscript.ocx"
Вышеупомянутые несколько методов (рекомендуется) VC Calling JavaScript - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.