1. 程式人生 > >如何從 VC WebBrowser 應用程式中呼叫指令碼函式

如何從 VC WebBrowser 應用程式中呼叫指令碼函式

為了呼叫指令碼函式存在的網頁上,您必須使用自動化 ; 換句話說,IDispatch。 使用以下步驟來呼叫指令碼函式從 Visual C++ 應用程式的網頁上存在的:

  1. 獲取在 HTML 文件的 IDispatch。
  2. 呼叫利用 IDispatch:: GetIDsOfNames 獲取指令碼函式的 ID。
  3. 呼叫 IDispatch:: Invoke 執行該函式。

下面的 Visual C++ 原始碼演示如何在您自己的應用程式中對此進行實現。 此程式碼使用智慧指標由 # import 語句。 必須在中您源的程式碼檔案最好 stdafx.h 之一包含此 # import 語句:
#import "C:/winnt/system32/mshtml.tlb" // location of mshtml.tlb

   void CMyClass::ExecuteScriptFunction()
   {
      // m_WebBrowser is an instance of IWebBrowser2
      MSHTML::IHTMLDocument2Ptr spDoc(m_WebBrowser.GetDocument());

      if (spDoc)
      {
         IDispatchPtr spDisp(spDoc->GetScript());
         if (spDisp)
         {
            // Evaluate is the name of the script function.
            OLECHAR FAR* szMember = L"evaluate";
            DISPID dispid;

            HRESULT hr = spDisp->GetIDsOfNames(IID_NULL, &szMember, 1,
                                           LOCALE_SYSTEM_DEFAULT, &dispid);

            if (SUCCEEDED(hr))
            {
               COleVariant vtResult;
               static BYTE parms[] = VTS_BSTR;

               COleDispatchDriver dispDriver(spDisp, FALSE);

               dispDriver.InvokeHelper(dispid, DISPATCH_METHOD, VT_VARIANT,
                                       (void*)&vtResult, parms,
                                       "5+Math.sin(9)");
            }
         }
      }
   }
以下是為包含求函式的網頁的 HTML:
<HTML>
  <HEAD>
    <TITLE>Evaluate</TITLE>

    <SCRIPT>
      function evaluate(x)
      {
         alert("hello")
         return eval(x)
      }
   </SCRIPT>
  </HEAD>

  <BODY>
  </BODY>
</HTML>