Win32 , C++

웹 브라우저 내의 Javascript 호출하기 예제

김모작자 2006. 8. 31. 19:19
void CallScript()
{
   HRESULT hr;
   IWebBrowser2 * pparent=NULL;

   pparent = (IWebBrowser2*) GetIWebPointer();

   LPDISPATCH lpDispatch = NULL;

   hr = pparent->get_Document(&lpDispatch);
   if (!SUCCEEDED(hr))
   {
       AfxMessageBox("error get document");
       lpDispatch->Release();
       return;
   }

   IHTMLDocument2 *m_pDoc2;
   hr = lpDispatch->QueryInterface(IID_IHTMLDocument2, (void**) &m_pDoc2);
   if (!SUCCEEDED(hr))
   {
       AfxMessageBox("error get document interface");
       m_pDoc2->Release();
       return;
   }

   CComQIPtr< IHTMLDocument > pDoc( m_pDoc2 );
   //
   // 스크립트 엔진의 디스패치 를 얻는다.
   //
   CComPtr< IDispatch > pDisp;
   hr = pDoc->get_Script( &pDisp );
   //
   // 스크립트 엔진디스패치에서 주어진 함수를 찾는다. 즉 dispid를 세트.
   //
   OLECHAR FAR* szFunctionName = L"EndUpload";        // 호출할 Javascript 명
   DISPID dispid;
   hr = pDisp->GetIDsOfNames( IID_NULL, &szFunctionName, 1,
                             LOCALE_SYSTEM_DEFAULT, &dispid);
   //
   // Invoke하기 위한 파라미터 세트.
   //


   DISPPARAMS dispParams;
   dispParams.rgvarg = NULL;
   dispParams.rgdispidNamedArgs = NULL;
   dispParams.cArgs = 0;
   dispParams.cNamedArgs = 0;
   hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
                      DISPATCH_METHOD, &dispParams, NULL, NULL, NULL);
}