利用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
>