C# Cef winform 脚本的执行 踩过的坑
先从后端代码 如何执行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);
}
};
C# Cef winform 脚本的执行 踩过的坑的更多相关文章
- 那些天,shell脚本中曾经踩过的坑
前些天,需要实现一个需求,用脚本轮流kill服务器上的进程,观察内存变化情况,并写日志.脚本逻辑不难,但shell脚本好久不用,看过书里的语法都忘得差不多了,中间踩了不少的坑,特此记录一下,留作后续参 ...
- 阿里云ECS服务器上搭建keepalived+mha+mysql5.6+gtid+一主两从+脚本判断架构踩的坑
最近,公司项目搭建了一套后端数据库架构,不是在RDS,是在阿里云的ECS服务器上搭建keepalived.mha.mysql5.6.gtid.一主两从架构,目前还没有实现读写分离,以后架构升级,可能代 ...
- Unity中脚本的执行顺序总结(@WhiteTaken)
(Editor)以上是Unity官方文档中的截图,脚本在被挂载到物体上,会启用Editor的方法Reset. (Initialization)当执行脚本开始,初始化的过程中,依次执行的是Awake-& ...
- 深入理解PHP内核(四)概览-PHP脚本的执行
本文链接:http://www.orlion.ml/236/ 下面以php命令行程序为例解释PHP脚本是怎么被执行的.例如如下脚本: <?php $str = 'hello world'; ec ...
- Unity3D中脚本的执行顺序和编译顺序
http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与 ...
- Shell脚本中执行mysql的几种方式(转)
Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...
- 【转】Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)
http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与 ...
- shell脚本循环执行mysql语句
参考资料:Shell脚本中执行mysql语句 需求:数据库里有张数据表存储的是用户对电影的评价(user_id movie_id rating time),但是我现在要每部电影的总评分. 解决方法: ...
- Linux下的Source命令及脚本的执行方式解析
Linux Source命令及脚本的执行方式解析 http://blog.csdn.net/wangyangkobe/article/details/6595143 当我修改了/etc/profile ...
随机推荐
- redis在项目中的应用
redis在项目中的应用 ps:PHP 会自动 关redis连接 不需要手动关 对于临时的数据 可以不经过数据库直接redis上操作<pre>/*消息队列实例 消息队列详细步骤在http ...
- 基于hash的AB测试
AB测试 为同一个目标,设计两种方案,将两种方案随机投放市场中,让组成成分相同(相似)用户去随机体验两种方案之一,根据观测结果,判断哪个方案效果更好. 基于hash的AB测试 具体的实现方法为: 在A ...
- 探索FFmpeg
Part1 :FFmpeg简介 FFmpeg定义 FFmpeg是一款音视频编解码工具,为开发者提供了大量音视频处理接口. FF指的是"Fast Forward" FFmpeg历史 ...
- HashMap 源码分析 基于jdk1.8分析
HashMap 源码分析 基于jdk1.8分析 1:数据结构: transient Node<K,V>[] table; //这里维护了一个 Node的数组结构: 下面看看Node的数 ...
- 【java】Java多线程总结之线程安全队列Queue【转载】
原文地址:https://www.cnblogs.com/java-jun-world2099/articles/10165949.html ============================= ...
- 缓存雪崩、穿透如何解决,如何确保Redis只缓存热点数据?
缓存雪崩如何解决? 缓存穿透如何解决? 如何确保Redis缓存的都是热点数据? 如何更新缓存数据? 如何处理请求倾斜? 实际业务场景下,如何选择缓存数据结构 缓存雪崩 缓存雪崩简单说就是所有请求都从缓 ...
- PyTorch中MaxPool的ceil_mode属性
PyTorch中的MaxPool(最大池化)有一个属性:ceil_mode,默认为False(地板模式),为True时是天花板模式.
- Go语言http包简易入门
说道go语言web编程,必不可少的会使用到net/http包.go语言将web开发需要使用到的很多内容都放在了标准库中——net/http. 如何写一个简单的web程序很容易.如下: package ...
- 纯C语言实现线性链表
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LNode{ ElemT ...
- 极速体验docker容器健康
本文目是体验docker容器的健康检查功能,以体验为主不涉及开发,与开发相关的内容会在后面的文章细说. 关于容器健康检查 考虑这样的情况:docker环境中,springboot应用的容器还在,但已无 ...