您的位置:首页 > Web前端 > JavaScript

从IWebBrowser2获取IHTMLDocument2的Script对象,执行指定的JS脚本

2013-07-05 14:57 357 查看
ATL控件嵌入在一个网页内, 在ATL控件内获取网页的IWebBrowser2指针, 并获取对应的网页元素对象, 如Document, Script等

[cpp] view
plaincopy

CComPtr<IWebBrowser2>   m_pIWebBrowser;  

CComPtr<IHTMLDocument2>   m_pDocument;  

CComPtr<IDispatch>   m_pScript;  

BOOL GetIWebBrowser()  

{  

   IOleClientSite* pClientSite;  

   GetClientSite(&pClientSite);     

  

   if (pClientSite == NULL)  

     return FALSE;  

   CComQIPtr<IServiceProvider> pISP(pClientSite);  

   if (pISP == NULL)  

     return FALSE;  

   pISP->QueryService(IID_IWebBrowserApp,   IID_IWebBrowser2,(void   **)&m_pIWebBrowser);  

   if (m_pIWebBrowser == NULL)  

     return FALSE;  

   //取得IHTMLDocument2  

   m_pIWebBrowser->get_Document((IDispatch**)&m_pDocument);  

   if (m_pDocument == NULL)  

     return FALSE;  

   //获取脚本对象  

   m_pDocument->get_Script(&m_pScript);  

   if (m_pScript == NULL)  

    return FALSE;  

     

   return TRUE;  

}  

  

//根据获取到的脚本对象, 可执行一段脚本函数  

void InvokeWebScript(BSTR srciptName)  

{  

    CComBSTR bstrMember(srciptName);  

    DISPID dispid;  

    HRESULT hr;  

    if(m_pScript!=NULL)  

    {  

      hr = m_pScript->GetIDsOfNames(IID_NULL,&bstrMember,1,LOCALE_SYSTEM_DEFAULT,&dispid);  

      if (SUCCEEDED(hr))  

      {  

        DISPPARAMS dispparams;  

        memset(&dispparams, 0, sizeof(DISPPARAMS));  

        dispparams.cArgs = 0;  

        dispparams.cNamedArgs = 0;  

  

        EXCEPINFO excepInfo;  

        memset(&excepInfo, 0, sizeof(EXCEPINFO));  

        CComVariant vaResult;  

        // initialize to invalid arg  

        UINT nArgErr = (UINT)-1;  

        // 执行js代码  

        hr = m_pScript->Invoke(dispid,IID_NULL,0,DISPATCH_METHOD,&dispparams,&vaResult,&excepInfo,&nArgErr);  

      }  

    }  

}   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: