先从后端代码 如何执行js 代码谈起;

一个简单的需求: 在winform上点击一个按钮,实现登录信息的填入

流程: 就是让C#去运行一段脚本,.

运行的方式有两种, 异步与同步,

因为CEF是一帧一帧运行的,所有需要指定这段js 在哪个frame 里面运行

方法1: CefWebBrowser.GetBrowser().GetFrame("mem_index").ExecuteJavaScriptAsync("you js code")

执行脚本都是在 Frame 之下 执行的

方法2: e.Frame.ExecuteJavaScriptAsync("you js code")

CefWebBrowser.GetBrowser().GetFrame("mem_index").ExecuteJavaScriptAsync(a);

CefWebBrowser.ExecuteScriptAsync(a);

这两者之间的区别是,操作的dom 对象不同, 面对不同的iframe 就有不同的 js 代码执行,  并且,执行多行代码时,就需要将多行代码放在只执行闭包函数里面,(function(){ ..... })()  只有这样才成功执行。

// 在此进行区分
if (e.Url.Contains("/entrance/page/soya"))
{ // 登录页面
//chromiumBrowser.("mem_index").EvaluateScriptAsync(Resources.loginjs);
chromiumBrowser.GetBrowser().GetFrame("mem_index").ExecuteJavaScriptAsync(Resources.loginjs);
// 多个框架之下,一定要指定名称 来执行脚本
//chromiumBrowser.ExecuteScriptAsyncWhenPageLoaded(Resources.loginjs);

}

关于在前端注入对象

其他说明
以目前版本为准,注入C#类到WEB页面中的方式有如下2种。

var _chromiumWebBrowser = new ChromiumWebBrowser();
// 反正你先初始化这玩意
// ...

// 1. 旧版本的注入方式,从后端到前端,官方不建议使用
CefSharpSettings.LegacyJavascriptBindingEnabled = true; //首先打开开关(老东西)
_chromiumWebBrowser.RegisterJsObject("testold", new TestClass());

// 2. 新版本的注入方式,从前端到后端,官方推荐,可用于多页面
_chromiumWebBrowser.JavascriptObjectRepository.ResolveObject += (s, eve) =>
{
var repo = eve.ObjectRepository;
if (eve.ObjectName == "testnew") //这个名字对应页面上 CefSharp.BindObjectAsync('testnew') 部分
{
repo.Register("testnew", new TestClass(), isAsync: true, options: BindingOptions.DefaultBinder);
}
};

最新文章

  1. js浮点乘除法运算不精确bug
  2. openstack上创建vm实例后,状态为ERROR问题解决
  3. biweb添加新的模块
  4. mac 笔记
  5. Oracle的thin驱动和oci驱动有什么不同?哪个性能好些?
  6. POJ 3660 Cow Contest (Floyd)
  7. linux如何开机以命令行形式启动?
  8. 简单又强大的联发科手机PhilZ Touch Recovery安装器,详细教程 - 本文出自高州吧
  9. layerX offsetX pageX
  10. http的Max-Forwards头的作用(转)
  11. ubuntu16.04 英文环境安装中文输入法
  12. Day1 Python基础学习
  13. 总结,为什么要重写hashset的hashcode()和equals()?
  14. 13--Python入门--文件读写--CSV&Excel文件
  15. Redis的安装及命令返回值
  16. asp.net 发送电子邮件本地测试正常,但服务器上异常的解决办法
  17. position实现分层和遮罩层功能
  18. 【CSAPP笔记】10. 代码优化
  19. springboot EnableAutoConfiguration
  20. jeesite快速开发平台(四)----数据库各表一览

热门文章

  1. Python OpenCV 显示图片,图片分类
  2. Python之threading多线程,多进程
  3. js 实现 promise
  4. .net Core 学习笔记(增加Nlog日志)
  5. SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常
  6. C语言语法教程-结构体
  7. linux常用命令--开发调试篇
  8. 洛谷P1523 旅行商简化版(DP)
  9. Linux下Mysql5.7忘记密码
  10. C# abstract class Interface的介绍