Как правильно вызвать событие onsubmit, используя интерфейсы IWebBrowser2 (используя c ++) - PullRequest
0 голосов
/ 11 января 2011

Я пытаюсь вызвать onsubmit программно, не нажимая кнопку формы.

Сначала я пытаюсь просто вызвать функцию отправки интерфейса IHTMLFormElement, но форма неправильно обрабатывает входные данные:

CComPtr<IHTMLFormElement> ppvForm;
ppvForm->submit();

Я прочитал в документации, и она говорит, что функция submit не вызывает событие onsubmit, затем я пытаюсь вызвать событие onsubmit, используя метод вызова IDispatch, предоставляемый get_onsubmit интерфейса IHTMLFormElement:

CComPtr<IHTMLFormElement> ppvForm;
...
_variant_t vResult;
_variant_t tvar;
hResult = ppvForm->get_onsubmit(&tvar); // <<< i get a NULL VARIANT here 

DISPPARAMS params = {0};
hResult = tvar.pdispVal->Invoke(
    DISPID_VALUE, 
    IID_NULL,
    LOCALE_SYSTEM_DEFAULT, 
    DISPATCH_METHOD, 
    &params, 
    &vResult, 
    NULL, 
    NULL);
if( SUCCEEDED(hResult) )
...

Но вызов ppvForm-> get_onsubmit возвращает S_OK с NULL-вариантом ... (не знаю почему?!)

И в конце пробовал fireEvent из IHTMLDocument4интерфейс:

HRESULT hrRes=S_FALSE;
CComPtr<IHTMLDocument4> piDoc;
...
VARIANT_BOOL varRet;
CComPtr<IHTMLEventObj>pEvent;
hrRes=piDoc->createEventObject(NULL, &pEvent);

_variant_t vtEvent(pEvent);
hrRes=piDoc->fireEvent(_bstr_t(_T("onsubmit")), &vtEvent, &varRet);

FireEvent теперь всегда возвращает E_INVALIDARG!не знаю почему?не знаю, нужно ли мне что-то поместить в vtEvent или строка «onsubmit» недопустима, не знаю.

Может кто-нибудь указать мне правильное направление или сказать, что я делаю неправильно

1 Ответ

0 голосов
/ 11 января 2011

Если get_onsubmit() возвращает S_OK и обработчик NULL, то для формы просто не существует обработчика события отправки, назначенного для формы.

...