activex控件中调用html页面中的javascript(转)
关于delphi中开发activex控件,并从activex控件中调用html页面中的javascript。
这几天在搞个需要activex控件来实现的项目,丫丫的activex控件应该属于都快被人遗忘的技术了。
delphi中开发activex控件其实挺简单的,唯一的问题就是怎么调用页面中的javascript呢。
搜了n久发现一个c++写的通过接口调用方法,看上去贼复杂。
其实delphi中调用页面上的javascript贼简单。
方法如下:
1.创建一个方法->SetDoc->procedure SetDoc(const Doc: IUnknown); safecall;
用了一个IUnknown类型.
2.就一句话将IUnknown转成IHTMLDocument2->代码如下:
procedure TCxty_Lib.SetDoc(const Doc: IUnknown);
begin
if Assigned(Doc) then
begin
HTMLDoc := IHTMLDocument2(Doc as IHTMLDocument);
end;
end;
注意前头要申明一个 HTMLDoc ,是IhtmlDocument2类型,我申明在 private 中.
3.就是写一个调用javascript的方法咯,代码如下:
procedure TCxty_Lib.CallJavascript(script: string);
var
win: IHTMLWindow2;
begin
if not Assigned(HTMLDoc) then
Exit;
win := HTMLDoc.parentWindow;
if not Assigned(win) then
Exit;
win.execScript(script, 'JavaScript');
end;
delphi部分就已完成.
贼简单吧,还没完重要的在html页面上,代码如下:
创建OBJECT
<OBJECT
classid="clsid:C15DFE4C-B668-4178-A64B-3945365725F2"
codebase="Cxty_LibProj1.ocx#version=1,0,0,0"
width=0
height=0
align=center
hspace=0
vspace=0
id="Cxty"
>
</OBJECT>
<SCRIPT LANGUAGE="JavaScript">
var Yannyo_Net = document.getElementByIdx('Yannyo_Net');
Yannyo_Net.SetDoc(document);//这句就吧页面上的document传给了activex,然后activex就为所欲为了.
</SCRIPT>
activex中调用脚本的时候只需调用 CallJavascript('javascript函数名称(参数)');