转至:http://www.360doc.com/content/11/1118/10/7662927_165405895.shtml
http://www.k51.com.cn@H_404_7@
delphi中WEBbrowser网页JS函数调用delphi函数
1、基本操作
@H_404_7@1.1、激活
@H_404_7@var doc,url:Olevariant ;
@H_404_7@begin
@H_404_7@url:='about:blank' ;//或者一个有实际意义的url
@H_404_7@Webbrowser1.Navigate2(url);//这样就激活了!
@H_404_7@end;
@H_404_7@1.2、写HTML代码
@H_404_7@var doc:Olevariant ;
@H_404_7@s:string;
@H_404_7@begin
@H_404_7@doc:=Webbrowser1.Document;
@H_404[email protected];//清楚缘由内容,以便写新内容
@H_404[email protected]('<html>');
@H_404_7@//其它代码
@H_404[email protected]('</html>');
@H_404[email protected];//这样就生效了!
@H_404_7@end;
@H_404_7@1.3、获得HTML文本
@H_404_7@var doc:Olevariant ;
@H_404_7@s:string;
@H_404_7@begin
@H_404_7@doc:=Webbrowser1.Document;
@H_404_7@s:=doc.documentElement.outerHTML;//s里就是HTML文本了
@H_404_7@//处理s就行了
@H_404_7@end;
@H_404_7@2、中级操作
@H_404_7@2.1、获得其中HTML元素的值
@H_404_7@var doc:olevariant;
@H_404_7@s:string;
@H_404_7@begin
@H_404_7@doc:=Webbrowser1.Document;
@H_404_7@s:=doc.all.btn.value;
@H_404_7@end;
@H_404_7@2.2、改写其中HTML元素的值
@H_404_7@var doc:olevariant;
@H_404_7@begin
@H_404_7@doc:=Webbrowser1.Document;
@H_404[email protected]:='123123';
@H_404_7@end;
@H_404_7@3、高级操作
@H_404_7@3.1、触发其中HTML元素的事件
@H_404_7@var doc:olevariant;
@H_404_7@begin
@H_404_7@doc:=Webbrowser1.Document;
@H_404[email protected];
@H_404_7@end;
@H_404_7@3.2、让其中的元素执行webbrowser之外的delphi代码 本来,这有很复杂的解决办法,但那部分属于ATL的知识比较难掌握,因此绕了一下: 让那些需要执行delphi的HTML元素,调用一个函数叫做triggerExEvent,参数是HTML元素的名称,然后是若干参数。 triggerExEvent是javascript函数,有不确定个参数,但第一个肯定是表示元素的名称。 triggerExEvent将参数组成字符串,然后前面冠以"#OnTriggerExEvent:",作为url,然后导航。 在webbrowser的onNavigator2事件里,判断url中是否包含"#OnTriggerExEvent:",如果包含怎作如下处理: a、cancel这次导航;b、将"#OnTriggerExEvent:"之后的信息截取,作为参数传递给webbrowser的新增一个事件OnTriggerExEvent事件,其参数有两个:1、控件名称;2、一个字符串参数。 这样,用户可以在OnTriggerExEvent事件里处理HTML的点击等事件了 例如,我为webbrowser派生新类,叫做webbrowserEx,它有一个事件叫做OnTriggerExEvent 有个js文件包含这样的函数: function triggerExEvent(cmpnt_id,event_nm,optionstr) {url='#triggerExEvent:id='; url=url+cmpnt_id+';eventnm='+event_nm; if(optionstr) url=url+';params=optionstr'; location=url;} 在HTML文本里可以这样写: <input type="button" name="Submit" value="按钮" onClick="triggerExEvent('Submit','click',null);"> 这样,点击网页里的按钮时,会触发delphi写的代码,这些代码根据传递过来的参数,再进行调用其它合适的事件,也可以让webbrowserEx自动寻找合适的事件来触发,只有寻找不到时才…