2011-01-10 85 views
0

我試圖通過編程方式調用onsubmit而無需單擊窗體按鈕。如何使用IWebBrowser2接口(使用c + +)正確調用onsubmit事件

首先我嘗試簡單地調用提交IHTMLFormElement接口的功能,但形式不正確地處理輸入數據:

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

我的文檔中讀取和它說,提交功能不叫在onsubmit事件,然後我嘗試使用IDispatch調用由IHTMLFormElement接口的get_onsubmit提供的方法來調用onsubmit事件:

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 ... (別 知道爲什麼?!)

而最終從IHTMLDocument4接口嘗試fireEvent:

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」字符串無效,不知道。

任何人都可以指向正確的方向或告訴我我做錯了什麼?

回答

0

如果get_onsubmit()正在返回S_OK和一個NULL處理程序,那麼根本沒有分配給表單的onsubmit事件處理程序開始。

+0

它是HTML頁面中的唯一形式,如果我在IHTMLElement(html button elment)上調用click()函數,所有過程都可以正確完成(但這需要用戶在消息框中作出選擇,並且我試圖避免此消息框) 按鈕代碼:(? 「的動作確認書」 確認() 功能投遞(){ 如果 (submitthis()) 如果) 的document.getElementById(」 form1' 中)提交();你可以看到我只想做'document.getElementById('form1')。submit();'聲明... – Nuno 2011-01-11 20:18:15