(转)delphi chrome cef3 控件学习笔记 (二)

https://blog.csdn.net/risesoft2012/article/details/51260832

原创 2016年04月27日 14:19:43
  • 3083
用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交互的更深层次方面。

转)delphi chrome cef3 控件学习笔记 (二)的更多相关文章

  1. Corelocation及地图控件学习笔记

    Corelocation基本使用 在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用.(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知 ...

  2. Winform控件学习笔记【第二天】——常用控件

    背景:期末考试刚过就感冒了,嗓子火辣辣的,好难受.但是一想起要学习总结就打起精神来了,Winform控件网上也没有多少使用教程,大部分都是自己在网上零零散散的学的,大部分用的熟了,不总结会很容易忘得. ...

  3. WinForm控件学习笔记【第一天】——Control类

    感悟:明天就又是学校双选会的日子了.两年我都参与了学校的双选会的服务工作,现在该是双选会服务的我时候了.怎么样找到一份好的工作,或者说怎么样学习才能符合企业对人才的要求,我现在也是很迷茫.平时都是在看 ...

  4. dev控件学习笔记之----CxGrid

    本人总结的DEV学习:希望对大家有所帮助. 一.是否显示分组工具: 二.表格左边记录信息显示的宽度: 三.设置表格行高: 四.表头文件的水平和垂直设置:多个设置用按住SHIFT后进行多选,然后就可以设 ...

  5. web前端开发控件学习笔记之jqgrid+ztree+echarts

    版权声明:本文为博主原创文章,转载请注明出处.   作为web前端初学者,今天要记录的是三个控件的使用心得,分别是表格控件jqgrid,树形控件ztree,图表控件echarts.下边分别进行描述. ...

  6. DataGridView控件-学习笔记总结

    1.GridColor属性用来获取或设置网格线的颜色 dataGridView1.GridColor=Color.Blue; 2.设置宽度 .高度 dataGridView1.Columns[].Wi ...

  7. C# WinForm调用UnityWebPlayer Control控件 <学习笔记1>

    工具 1.三维场景 Unity 5.0.2f1 2.开发环境Microsoft Visual Studio 2010 3.需要使用的控件 UnityWebPlayer Control 出现的问题及解决 ...

  8. Winform控件学习笔记【第六天】——TreeView

    TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个 ...

  9. Winform控件学习笔记【第五天】——ListView

    [第五天] 常用的基本属性: FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. GridLines:设置行和列之间是否显示网格线.( ...

随机推荐

  1. 移动前端不得不了解的Meta标签

    http://ghmagical.com/article/page/id/PSeJR0rPd34k

  2. Windows系统如何安装Redis

    转自 http://blog.csdn.net/lamp_yang_3533/article/details/52024744 一.Redis的下载地址 Redis官方并没有提供Redis的windo ...

  3. IO同步阻塞与同步非阻塞

    BIO.NIO.AIO IO(BIO)和NIO区别:其本质就是阻塞和非阻塞的区别 阻塞概念:应用程序在获取网络数据的时候,如果网络传输数据很慢,就会一直等待,直到传输完毕为止. 非阻塞概念:应用程序直 ...

  4. Android 点击跳转到蓝牙设置界面

    不再重写一遍了,看csdn: https://blog.csdn.net/qq_42866164/article/details/101353709

  5. numpy中的range()

    1.arange返回一个array对象,arange(5)=([0,1,2,3,4]) 2.如果是两个参数,第一个参数是起点,第二个参数是终点 3.如果是三个参数,那么第三个参数就是步长

  6. Educational Codeforces Round 32 Almost Identity Permutations CodeForces - 888D (组合数学)

    A permutation p of size n is an array such that every integer from 1 to n occurs exactly once in thi ...

  7. iptables常用语法与案例

    常用命令语法: [root@www ~]# iptables [-t tables] [-L] [-nv] 选项与参数: -t :后面接 table ,例如 nat 或 filter ,若省略此项目, ...

  8. Laravel——缓存使用

    1.使用Redis类 use Illuminate\Support\Facades\Redis; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  9. git上拉项目

  10. CSS3边框 圆角效果 border-radius

    border-radius是向元素添加圆角边框 使用方法: border-radius:10px; /* 所有角都使用半径为10px的圆角 */ border-radius: 5px 5px 5px ...