none
为什么我用fireEvent触发button的onclick事件打开页面,没有效果呢? RRS feed

  • 问题

  • 在WebBrowser中自动点击链接,spElement->click()这种形式不能满足我的需求,但使用IHTMLElement3的fireEvent函数又不起作用,请高手指点一下,万分感谢!部分代码如下:

    CComQIPtr<IHTMLElement3, &IID_IHTMLElement3>spElement3 = spElement;
    CComQIPtr<IHTMLDocument4, &IID_IHTMLDocument4>spIHTMLDocument4 = spIHTMLDocument2;
    CComPtr<IHTMLEventObj>spIHTMLEventObj;

    VARIANT varEventObject;
    VariantInit(&varEventObject);
    hr = spIHTMLDocument4->createEventObject(&varEventObject, &spIHTMLEventObj);
    //hr = spIHTMLDocument4->createEventObject(NULL, &spIHTMLEventObj);
    CComQIPtr<IHTMLEventObj2, &IID_IHTMLEventObj2>spIHTMLEventObj2 = spIHTMLEventObj;
    CComQIPtr<IDispatch, &IID_IDispatch>spEventDisp = spIHTMLEventObj2;

    CComBSTR bstrEventName = "onclick";
    VARIANT_BOOL vBool = VARIANT_FALSE;

    VariantInit(&varEventObject);
    V_VT(&varEventObject) = VT_DISPATCH;
    V_DISPATCH(&varEventObject) = spEventDisp;

    hr = spElement3->fireEvent(bstrEventName, &varEventObject, &vBool);

    测试网页代码:
    <html>
    <title>test</title>
    <head></head>
    <body>
    <a href="http://www.google.com" onclick="alert('ok');return true;">Google</a>
    </body>
    </html>

    我要的效果是先出现ok对话框,然后导航到Google! 但是fireEvent仅仅出现对话框,不会导航到Google页面。请问哪个环节出问题了?

    • 已编辑 ddd22 2012年2月3日 2:15
    2012年2月3日 1:52

答案

  • FireEvent只是调用脚本事件处理函数而已,不是代表你模拟了鼠标点击。你可以解析HTML之后直接调用Navigate。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2012年2月13日 9:29
    2012年2月6日 5:03
    版主

全部回复

  • 用dispatchEvent:

    btn.dispatchEvent(new Event("click"));

    eventname用"click"试试看

    2012年2月3日 9:54
  • 不行的!同样是无法打开链接
    2012年2月3日 16:28
  • FireEvent只是调用脚本事件处理函数而已,不是代表你模拟了鼠标点击。你可以解析HTML之后直接调用Navigate。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Rob Pan 2012年2月13日 9:29
    2012年2月6日 5:03
    版主
  • 这种的Navigate获取到的来路跟点击打开后获取到来路是不一样的啊!

    2012年2月16日 3:39