用惯了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接口,后面的操作请随意。

  其次是填表,用过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代码不能生效。

  最后,最后先到这里,下一次再说关于弹出窗口、右键菜单、摸拟鼠标点击等内容。

附:google论坛,delphi TChromium的问题讨论群组:http://groups.google.com/group/delphichromiumembedded

用Tchromium替换webbrowser的更多相关文章

  1. 用Tchromium替代webbrowser提交网页表单有关问题

    用Tchromium替代webbrowser提交网页表单有关问题   提交表单时,使用js脚本,然后用 chrm.browser.Frame['ff'].ExecuteJavaScript 提交就可以 ...

  2. delphi WebBrowser的使用方法详解(五)-难点释疑

    网页代码:<SELECT id=fy onchange=TouchRefresh(1) name=fy> <OPTION selected value=15>每頁顯示15筆&l ...

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

    原文   http://blog.csdn.net/xtfnpgy/article/details/46635739   用Tchromium替换webbrowser 用惯了EmbeddedWB,不想 ...

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

    (转)delphi chrome cef3 控件学习笔记 (二) https://blog.csdn.net/risesoft2012/article/details/51260832 原创 2016 ...

  5. HtmlAgilityPack相关网页

    //多线程 http://www.cnblogs.com/jiangming/archive/2012/09/11/MultiThreadCallWebbrowser.html //替换Webbrow ...

  6. .NET 6上的WebView2体验

    上次说为了不想在web端登录博客园,我想着还是继续使用MarkWord编写博客,不过在使用的过程中,如果markdown文件的目录中有中文的话,Markdown预览就不能够显示粘贴的图片了,原因是之前 ...

  7. C#将WebBowser控件替换为Chrome内核

    摘要 由于最近要做一个浏览器式的软件,其中有不少地方需要使用到jQuery和BootStrap,但是在C#中,默认的WebBrowser控件默认使用的是IE的core,而低版本的IE在JS加载上总是容 ...

  8. 解决 WPF AllowsTransparency = true 和 Webbrowser 等控件显示冲突

    代码: public class FormsWebBrowser { Window _owner; FrameworkElement _placementTarget; Form _form; AxA ...

  9. delphi中webbrowser的用法

    WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 WebBrowser1.GoForw ...

随机推荐

  1. C#高级学习群欢迎你(群号 128874886)

    C#高级学习群,有着C# ,Asp.net ,Wpf等技术经验相当丰富的工程师,秉承着刘群主开源共享的精神,为新手和高手们提供了良好的学习交流平台,自创群以来,为群员解决了不少的技术难题,大大提高了学 ...

  2. php hash_hmac 与python hmac 区别

    使用 HMAC 方法生成带有密钥的哈希值 hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = fal ...

  3. C++ 类模板一(类模板的定义)

    //类模版语法 #include<iostream> using namespace std; /* 类模板和函数模板深入理解 1.编译器并不是把函数模板处理成能处理任何类型的函数 2.编 ...

  4. 嵌入式驱动开发之spi---spi串口通信调试

    一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是:          * SPICLK     : 用于传输数据的同 ...

  5. linux 知识点拾遗

    文件名称 在 Linux 底下,每个档案或文件夹的文件名称最长能够到达 255 的字符,加上完整路径时,最长可达 4096 个字符; 因为 Linux 在文字接口下的一些指令操作关系,一般来说,您在设 ...

  6. 第5步:建立主机间的信任关系(sgdb1、sgdb2)

    5.1 Oracle用户下建立信任 5.11创建.ssh目录 [root@sgdb1 /]# su - oracle [oracle@sgdb1 ~]$ mkdir .ssh       创建一个.s ...

  7. memset陷阱

    最近在实现差分进化算法的时候,发现数据异常,查了好久,才知道是memset惹的祸! #include <iostream> #include <cstring> using n ...

  8. 如何用MathType编辑这三个符号

    MathType是一款专门的公式编辑器,用来编辑数学物理等公式,很多期刊杂志的排版都会用到它.用MathType编辑公式的时候,完全不用考虑学习和上手的过程,打开就可以编辑出你的公式,所以这个工具对于 ...

  9. hadoop入门学习整理

    技术性网站 1.http://dongxicheng.org/ 2.http://www.iteblog.com/ 3.http://www.cnblogs.com/shishanyuan/p/414 ...

  10. django用户认证系统——注册3

    用户注册就是创建用户对象,将用户的个人信息保存到数据库里.回顾一下 Django 的 MVT 经典开发流程,对用户注册功能来说,首先创建用户模型(M),这一步我们已经完成了.编写注册视图函数(V),并 ...