Delphi中Chrome Chromium、Cef3学习笔记(二)

用Tchromium替换webbrowser

  用惯了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交互的更深层次方面。

时间: 2024-11-13 05:06:22

Delphi中Chrome Chromium、Cef3学习笔记(二)的相关文章

Delphi中Chrome Chromium、Cef3学习笔记(一)

官方下载地址:https://cefbuilds.com/ CEF简介: 嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件.CEF支持一系列的编程语言和操作系统,并且能很容易地整合到新的或已有的工程中去. 它的设计思想政治就是易用且兼顾性能.CEF基本的框架包含C/C++程序接口,通过本地库的接口来实现,而这个库则会隔离宿主程序和Chromium&We

Delphi中Chrome Chromium、Cef3学习笔记(三)

Delphi与JS的交互问题: 一.执行简单的JS 上一篇已经讲过: chrm1.browser.MainFrame.ExecuteJavaScript('alert("abc");','about:blank',0); chrm1.browser.MainFrame.ExecuteJavaScript('function aaa(){alert("abc");}aaa();','about:blank',0); 二.注入自定义的JS 首先必须在网页加载完成之后,才

Ajax学习笔记(二)

二.prototype库详解 1.prototype库的使用 //导入下载好的prototype.js文件 <script type="text/javascript" src="prototype.js"></script> //在自己的js中直接使用Prototype对象 <script type="text/javascript"> document.writeln("Prototype库的版本

angular学习笔记(二十八-附2)-$resource中的promise对象

下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource){ return $resource('/card/user/:userID/:id',{userID:123,id:'@id'},{charge:{method:'POST',params:{charge:true},isArray:false}}) }); HttpREST.factory('h

angular学习笔记(二十八-附1)-$resource中的资源的方法

通过$resource获取到的资源,或者是通过$resource实例化的资源,资源本身就拥有了一些方法,比如$save,可以直接调用来保存该资源: 比如有一个$resource创建的服务: var service = angular.module('myRecipe.service',['ngResource']); service.factory('Recipe',['$resource',function($resource){ return $resource('/recipe/:id',

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

Chrome development tools学习笔记(5)

调试JavaScript 随着如今JavaScript应用的越来越广泛,在面对前端工作的时候,开发人员须要强大的调试工具来高速有效地解决这个问题.我们文章的主角,Chrome DevTools就提供了这么个工具来帮助我们降低调试JavaScript代码的痛苦. 顺便说下,不同版本号的Chrome浏览器的DevTools可能稍微有所不同,除了数字递增的版本号号以外.Chrome浏览器包含Stable正式版.Beta測试版.Dev开发版.Canary金丝雀版以及鼻祖 Chromium版这几个分支.博

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

Chrome development tools学习笔记(3)

(上次DOM的部分做了些补充,欢迎查看Chrome development tools学习笔记(2)) 利用DevTools Elements工具来调试页面样式 CSS(Cascading Style Sheets层叠样式表)定义了Web页面的表示层,是能够真正做到网页表现与内容分离的一种样式设计语言.本文主要是讲调试工具,关于CSS学习可以参考W3school的CSS部分:http://www.w3school.com.cn/css/index.asp. DevTools的Elements右边