Delphi中Chrome Chromium、Cef3学习笔记(二)
来源:互联网 发布:mac开压缩包有广告 编辑:程序博客网 时间:2024/05/17 05:11
用惯了EmbeddedWB,不想换,但是IE内核一直存在内存泄漏问题,没办法,只有寻找替代品了。
要把用习惯的EmbeddedWB换成完全不一样的TChromium,有点挑战,特别是在资料不多,英语没过三级的情况下。未来趋势是这样,只有慢慢啃了。
首先,想到的是跨域,如果不能跨域,就没办法替代手上的成品。TChromium的跨域比想像中的简单,直接通过chrm.Browser.GetFrameNames(list);//list:tstringList;取得各个IFrame/Frame的名称(所谓名称不是指name属性,只是一个标识,在有name时,返回name,没有name时,ID 也行,都没有时,自动生成一个唯一名称),如:
ff //这个是一个框架的ID
<!--framePath //ff/<!--frame0-->-->
<!--framePath //ff/<!--frame1-->-->
<!--framePath //ff/<!--frame2-->--> //后面三个是自动生成的唯一名称
获取指定Frame时,通过chrm1.Browser.Frame['frame 的名称'],取得ICefFrame接口,后面的操作请随意。
常用方法:
获取主框架 chrm1.browser.MainFrame
获取源代码 s := chrm1.browser.MainFrame.Source;
其次是填表,用过google浏览器的都知道,其填表功能实在强大,在webbrowser时代,一般都是获取表单元素的各种接口,然后设置其value、checked等属性,而在TChromium中,一切皆js,把想做的事都让js去执行吧,所以,用TChromium,js功力深厚的会轻松很多了。比如:
strTemp := 'document.forms[0].inmembername.value="User_Name";'; JavaExec(strTemp); strTemp := 'document.forms[0].inpassword.value="Password";'; JavaExec(strTemp); strTemp := 'document.forms[0].submit.click();'; chrm.browser.Frame['ff'].ExecuteJavaScript(str,'about:blank',0);; //想在哪一层frame执行,就调用哪一层
更神奇的是,还可以通过以下方法加载属于自己的jquery到浏览器中:
procedure TForm3.chrm1LoadEnd(Sender: TCustomChromium; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: TCefRetval);var str:string;begin str:='var oHead = document.getElementsByTagName(''HEAD'').item(0);'#13#10+ 'var oScript = document.createElement( "script" );'#13#10+ 'oScript.language = "javascript";'#13#10+ 'oScript.type = "text/javascript";'#13#10+ 'oScript.id = "sid";'#13#10+ 'oScript.defer = true;'#13#10+ 'oScript.src = "jquery.js";'#13#10+ 'oHead.appendChild( oScript );'#13#10+ 'alert("8")' ; Frame.ExecuteJavaScript(str,'about:blank',0);end;
直接连接本地的js!!!这段代码最后写在LoadEnd中,每加载完成一个frame,就让这个frame加载自己的jquery,如果在需要使用的时候再去加载jquery,jquery加载是需要时间的,可能会导致紧接着的js代码不能生效。
注意事项:Delphi执行JS的代码,必须注意大小写,特别是自己写的JS函数,因为JS是区分大小写的!~
下一篇主要讲解DELPHI与JS交互的更深层次方面。
- Delphi中Chrome Chromium、Cef3学习笔记(二)
- Delphi中Chrome Chromium、Cef3学习笔记(一)
- Delphi中Chrome Chromium、Cef3学习笔记(三)
- Delphi中Chrome Chromium、Cef3学习笔记(四)
- Delphi中Chrome Chromium、Cef3学习笔记(五)
- Delphi中Chrome Chromium、Cef3学习笔记(六)
- delphi chrome cef3 控件学习笔记 (二)
- (转)delphi chrome cef3 控件学习笔记 (二)
- delphi chrome cef3 控件学习笔记 (一)
- delphi chrome cef3 控件学习笔记 (三)
- delphi chrome cef3 控件学习笔记 (四)
- delphi chrome cef3 控件学习笔记 (五)
- (转)delphi chrome cef3 控件学习笔记 (一)
- (转)delphi chrome cef3 控件学习笔记 (三)
- (转)delphi chrome cef3 控件学习笔记 (四)
- (转)delphi chrome cef3 控件学习笔记 (五)
- CEF3 笔记二
- chrome CEF3 加载网页速度慢 delphi
- 如何成为一名数据科学家?
- LoaderCallbacks函数
- 云备份调研报告
- Nodepad++ 快捷键
- 设计模式-单例模式
- Delphi中Chrome Chromium、Cef3学习笔记(二)
- Android开发—1.NDK开发入门与SO模块生成
- android网络请求不能放在主线程
- 让自己痛苦的工作不是好工作
- 字符串-02 删除字符串中的子串(20)
- Java Reflection(四):方法
- Eclipse+PyDev+Django+Mysql搭建Python web开发环境
- MIME_TYPE总结
- Intent带参数跳转