zoukankan      html  css  js  c++  java
  • Delphi中Chrome Chromium、Cef3学习笔记(二)

    尊重作者原创,转载请注明出处,原文地址:

    http://blog.csdn.net/xtfnpgy/article/details/46635739


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

    尊重作者原创,转载请注明出处,原文地址:

    http://blog.csdn.net/xtfnpgy/article/details/46635739



  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/xtfnpgy/p/9285408.html
Copyright © 2011-2022 走看看