有如下html文件内容:
<html><body><form>
    <input type=button value='button' onclick='this.value="button_edit"' />
</form></body></html>现有以下代码片断:
    CComPtr<IHTMLElement> spInputElement;
    CComVariant vOnclick;
    spInputElement->get_onclick(&vOnclick);
    IDispatch* spdisp=vOnclick.pdispVal;
问题:
    如何利用spdisp->Invoke执行此onclick函数
    在下先表示感谢啦!!!

解决方案 »

  1.   

    IHTMLWindow2接口有个方法execScript可以执行脚本的.
      

  2.   

    HRESULT ExecJavascript(CString strJsFunctionName_In, const CArray<VARIANT, VARIANT&> &pArrVARIANT_Params)
    {
    //前提是你已经取得了IHTMLDocument2
    //(1)Get Script 
    CComPtr<IDispatch> pScript;

    hResult = m_IHTMLDocument2->get_Script(&pScript);
    if(FAILED(hResult))
    {
    return FALSE;
    } //(2)Get Javascript Function
    CComBSTR pCComBSTR(strJsFunctionName_In);
    DISPID pDISPID;
    hResult = pScript->GetIDsOfNames(IID_NULL, &pCComBSTR, 1, LOCALE_SYSTEM_DEFAULT, &pDISPID);
    if(FAILED(hResult))
    {
    return FALSE;
    } //(3)Add Parameters
    DISPPARAMS pDISPPARAMS;
    memset(&pDISPPARAMS, 0, sizeof(pDISPPARAMS)); int intArgsCount_In = pArrVARIANT_Params.GetSize();
    VARIANT* vParams = new VARIANT[intArgsCount_In]; for( int i = 0; i < intArgsCount_In; i++)
    {
    vParams[i] = pArrVARIANT_Params.GetAt(i); 
    } //Params Count
    pDISPPARAMS.cArgs = intArgsCount_In;
    //Params Array
         pDISPPARAMS.rgvarg = vParams;
    //Name Args Count
       pDISPPARAMS.cNamedArgs = 0;

    //(4)Invoke Javascript Method
    EXCEPINFO pEXCEPINFO;
    memset(&pEXCEPINFO, 0, sizeof(pEXCEPINFO)); CComVariant pCComVariant; //Initialize to invalid arg
    UINT nintArgErr = (UINT)-1;   hResult = pScript->Invoke
    (pDISPID, IID_NULL, 0, DISPATCH_METHOD, &pDISPPARAMS, &pCComVariant, &pEXCEPINFO, &nintArgErr);

    delete[] pDISPPARAMS.rgvarg;
    pScript.Release();

    if(FAILED(hResult))
    {
    return FALSE;
    } return TRUE;
    }随手写的,你拿去改改......
      

  3.   

    KKND2006:
    谢谢你!!!深夜给我回答问题
      

  4.   

    KKND2006回答得不错,但人品似乎...
    分明是从codeproject上COPY的,还好意思说什么“随手写的,拿去改改”,作呕
      

  5.   

    5楼,你在哪个codeproject的项目里发现过我这段代码?你是不是一看是英文注释就以为是从codeproject上COPY的吧?我因为是在外企工作,注释也要求是英文的这段代码是我实际项目里的activeX代码,编码风格完全是偶的风格如果能有完全重复的我还说他抄我的列