ActiveX和JavaScript交互(Delphi版本)

利用Delphi的ActiveForm,可以很方便地開發出可以嵌入IE的ActiveX組件,無需知道太多幕後的COM知識。如何使得OCX可以很方便地調用Web上的JavaScript函數呢,研究了一個下午,使用ActvieForm的Events接口搞定。說穿了不值錢,只要一句代碼就搞定,但是Google半天,琢磨了N久,看來還是基本功不紮實。

(1) 首先在ActiveForm的項目中找到ridl文件,打開它, 選擇ActiveForm的Events接口,點擊右鍵,建立一個新的方法,方法名爲我需要調用javascript的函數名。這裏我要調用一個JS的上傳圖片腳本,所以將其命名爲“OnUploadPic”。得到這個事件的ID,這裏是209

(2) 來到xxx_TLB.pas文件中(xxx爲你的項目名),在ActiveForm中Events接口中將這個GetUserNameAndPwd方法的聲明加進去。
procedure GetUserNameAndPwd(const userName: WideString; const userPwd: WideString); dispid 209;

(3) 然後HTML頁面中建立這個事件函數,注意event字段寫入事件名,for字段寫入你給OCX取的名字,也就<object>把OCX包進去的時候取的name值:

<script language="javascript" event="GetUserNameAndPwd(user,pass)" for="xxxx">            
            var userName=user;
            var userPwd =pass;
            alert("用戶名:"+userName);
            alert("用戶密碼:"+userPwd);
            window.location.href="bbb.html";
  </script>
注意關鍵字 event,for ;

在該ActiveX界面上的按鈕Button1事件代碼如下:
procedure TActiveFormX.Button1Click(Sender: TObject);
begin
  if FEvents <> nil then FEvents.GetUserNameAndPwd(edtUser.Text,edtPwd.Text)
  else showmessage('空');
end;

html 中ActiveX引用:
<OBJECT
      id="xxxx"
      classid="clsid:26AA79A4-F2E5-4B28-9F43-75E4508F593F"
      codebase="http://LIUZS/ActiveFormProj1.inf"
      width=350
      height=250
      align=center
      hspace=0
      vspace=0     
>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章