zoukankan      html  css  js  c++  java
  • 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);
    }
    };

  • 相关阅读:
    ThinkPHP框架基础知识
    ajax分页练习
    实例练习:购物车
    事件
    ajax基础
    jQuery事件
    jQuery基础
    PHP制作登录注册页面
    iview里tree组件改造
    Vue CLI及其vue.config.js(一)
  • 原文地址:https://www.cnblogs.com/aashui/p/12043576.html
Copyright © 2011-2022 走看看