【问题标题】:How to correctly call on onsubmit event using IWebBrowser2 interfaces (using c++)如何使用 IWebBrowser2 接口正确调用 onsubmit 事件(使用 C++)
【发布时间】:2011-06-06 19:59:02
【问题描述】:

我正在尝试以编程方式调用 onsubmit 而不单击表单按钮。

首先我尝试简单地调用 IHTMLFormElement 接口的提交函数,但是表单没有正确处理输入数据:

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

我在文档中看到它说提交函数不调用 onsubmit 事件,然后我尝试使用 IHTMLFormElement 接口的 get_onsubmit 提供的 IDispatch 调用方法调用 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 调用返回带有 NULL 变体的 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”字符串无效,不知道。

谁能指出我正确的方向或告诉我我做错了什么?

【问题讨论】:

    标签: c++ html com atl


    【解决方案1】:

    如果get_onsubmit() 正在返回 S_OK 和一个 NULL 处理程序,那么根本就没有分配给表单的 onsubmit 事件处理程序。

    【讨论】:

    • 它是 html 页面中的唯一表单,如果我在 IHTMLElement(html 按钮元素)上调用 click() 函数,所有过程都会正确完成(但这需要用户在一个消息框,我试图避免这个消息框)按钮代码: function enviar() { if (submitthis()) if (confirm("Confirmation of the action?")) document.getElementById('form1' )。提交();如您所见,我只想做与 'document.getElementById('form1').submit();' 相同的事情声明...
    • 由于消息框是由按钮的 onclick 事件而不是表单的 onsubmit 事件显示的,因此仅以可编程方式提交表单即可绕过消息框。那么您要解决的实际问题是什么?
    • 问题是提交(ppvForm->submit();第一个表单)没有正确执行,因为并非所有必需的参数都没有填写,我已经设置了所有参数并现在提交工作正常(使用第一种形式)。感谢 Remy Lebeau 为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-08-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多