全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3958
推到 Plurk!
推到 Facebook!

如何用TIdHTTP呼叫JavaScript?

缺席
melticemelt
一般會員


發表:22
回覆:29
積分:10
註冊:2002-10-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-14 08:52:16 IP:202.39.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=62626 之前po在這邊的文章    目前我已經用TCppWebBrowser試成功了,可是我希望能用TIdHTTP來做會比較精簡。    問題就出在它的Form在Submit之前會先call一段JavaScript,該Script會去call一段cab檔內的function,然後return回來的值在當做Post的參數傳過去,所以我也沒辦法模仿JavaScript的code自己寫,除非有辦法直接call cab檔的function,請問有辦法嗎?    就算用TCppWebBrowser直接Submit也不行,一定要先執行該Script再Submit才行。    程式碼如下(就是執行Script然後Submit) 請問有辦法改成Indy嗎? 或是有更簡單的方式可以達到相同的Automation嗎? 這程式碼真是太複雜了 (剪貼來的,其實我也不太懂這些東西)    
void Test1(TCppWebBrowser* IE)
{
   IHTMLDocument2 *HTMLDocument = NULL;
   if(SUCCEEDED(IE->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&HTMLDocument)) && HTMLDocument)
   {
      IHTMLElementCollection *HTMLForms = NULL;
      if(SUCCEEDED(HTMLDocument->get_forms(&HTMLForms)) && HTMLForms)
      {
         TVariant vName = "TAIMEX";//確定下單Form name
         TVariant vIndex = 0;
         IDispatch *pDisp = NULL;
         if(SUCCEEDED(HTMLForms->item(vName, vIndex, &pDisp)) && pDisp)
         {
            IHTMLFormElement *HTMLForm = NULL;
            if(SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement,(LPVOID*)&HTMLForm)) && HTMLForm)
            {    ////////////////////////////////
//test - execute javascript
VARIANT varRes;
HRESULT hr;
IHTMLWindow2* pWindow2;//should i release this later??
hr = HTMLDocument->get_parentWindow(&pWindow2);
VariantInit(&varRes);
BSTR scriptCode = L"check_double_click()";
BSTR scriptLang = L"JavaScript";
hr = pWindow2->execScript(scriptCode, scriptLang, &varRes);
VariantClear(&varRes);    ////////////////////////////////                   //do execScript before submit                   HTMLForm->submit();
               HTMLForm->Release();
            }
            pDisp->Release();
         }
         HTMLForms->Release();
      }
      HTMLDocument->Release();
   }//end if(HTMLDocument)         
}    
melticemelt
一般會員


發表:22
回覆:29
積分:10
註冊:2002-10-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-14 19:37:04 IP:202.39.xxx.xxx 未訂閱
因為已經得到要Post出去的值(沒想到竟然是個固定值!?) 所以已經可以用TIdHTTP成功下單    首先Install ActiveX Components把它下單網頁JavaScript使用到的元件安裝到BCB,新增一個程式call該function,把return值存到一個文字檔。OK~~    目前發現世華,日盛其實都是用同一個元件    程式碼模仿JavaScript寫的
   const int FSCAPI_FLAG_SELCERT_MANUAL          = 0x00000001;
   const int FS_FLAG_DETACHMSG                 = 0x00004000;
   const int FSCAPI_FLAG_SELCERT_AUTO         = 0x00000002 ;
   const int FSCAPI_FLAG_SELCERT_AFTER         = 0x00000004 ;
   const int FSCAPI_FLAG_SELCERT_CHECKVALID         = 0x00000010 ;
   const int FS_FLAG_CERT_ATTACHALL                = 0x00000200;       wchar_t *msgg=L"";
   wchar_t *Criterial = L"SN=XXXXXXXXX";       WideString ss = cab->FSCAPISign(msgg ,
                                        Criterial ,
                                        FSCAPI_FLAG_SELCERT_CHECKVALID|FSCAPI_FLAG_SELCERT_AUTO,
                                        0);       TMemoryStream *ms = new TMemoryStream;
   AnsiString as = WideToAnsi(ss);       ms->Write(as.c_str(),as.Length() 1);//save redundant \0
   ms->SaveToFile("Criterial.txt");
   delete ms;
shukaihuang
一般會員


發表:1
回覆:1
積分:0
註冊:2006-08-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-08-26 08:06:44 IP:59.104.xxx.xxx 未訂閱

您好

對您這個程式很感興趣

可以講詳細一些嗎

當然,如果能把code po上來是最理想啦

先謝了

系統時間:2024-11-23 3:22:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!