当前位置: 首页 > news >正文

WPF内嵌CEF控件,与JS交互

1)安装cefsharp.winform包

打开VS2017,打开nuget,找到cefsharp.winform,安装


问:为什么wpf程序不使用cefsharp.wpf?

答:因为cefwpf 49版本的bug很多,而winform_cef就比较靠谱,比如在不同的输入法切换后无法输入中文

问:那为什么不使用更高版本的cefwpf?

答:因为要支持XP,而49版本是cef_wpf能支持XP的最高版本


哦,业界毒瘤 ——XP和IE6


2):平台改成x64或者x86

因为Cefsharp没有针对AnyCpu的模式

3)代码如下:

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            //***这段代码很关键,而且只需执行一次即可,最好写在静态构造函数中*** //
            var settings = new CefSharp.CefSettings();
            settings.CefCommandLineArgs.Add("disable-gpu", "1");
            settings.CefCommandLineArgs.Add("force-device-scale-factor", "2");
            Cef.Initialize(settings);
            //********************************************************* //

            var webbrowser = new ChromiumWebBrowser("https://www.baidu.com");

            //为什么要用一个windowsformhost包起来,因为cef是winform的,所以在wpf下使用,必须用这个包一下
            var winform = new WindowsFormsHost()
            {
                Child = webbrowser
            };

            //绑定,和js交互的关键,注册一个JsObj,这个可以自定义,然后对于js来说,第二个参数this就代表了JsObj
            webbrowser.RegisterAsyncJsObject("JsObj", this, false);
            this.Content = winform;
        }

        public void (object pramas)
        {
            //可以通过这种方式取得参数
            var type = pramas.GetType();
            var id=type.InvokeMember("id", System.Reflection.BindingFlags.GetProperty, null, pramas, null);
            //do something.....
            Application.Current.MainWindow.Dispatcher.BeginInvoke(new Action(() =>//报错
            {
                //do something.....
            }));
            Dispatcher.BeginInvoke(new Action(() =>  //不会报错
            {
                //do something.....
            }));
        }
    }

上方代码中,display是被调方法,在执行display时,是子线程在执行,聪明的你一定想到了

那就Application.Current.MainWindow.Dispather.BeginInvoke,但是依然会报错,为什么?

因为在get mainwindow时依旧是操作了主线程的UI元素,所以改成下面那种方式即可

js代码:

<script type="text/javascript">    
        function abc()  
        {    
            JsObj.display(data);  
        }  
    </script>  



转载于:https://www.cnblogs.com/kevinWu7/p/10163491.html

相关文章:

  • PHP sql注入漏洞修复(字符串型)
  • 【系列教程1】Gradle入门系列二:第一个Java项目
  • Java Concurrent -- 同步容器类
  • 发现心中的暴力
  • 人人都能学会的python编程教程16:map和reduce
  • PHP变量存储与赋值
  • 设计模式学习笔记(1)组合
  • diskpart
  • 统一登录中心SSO 单点登录系统的构想
  • linux下的块设备驱动(一)
  • WeexSDK之注册Components
  • Linux操作系统常见安装方式
  • Android获取SD卡中选中图片的路径(URL)
  • Fragment结合ViewPager来回切换的问题
  • 如何判断某经纬度是否在地图不规则区域内(Objective-C 实现)
  • .pyc 想到的一些问题
  • 77. Combinations
  • avalon2.2的VM生成过程
  • Git初体验
  • go append函数以及写入
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript 一些 DOM 的知识点
  • JavaScript函数式编程(一)
  • Magento 1.x 中文订单打印乱码
  • oldjun 检测网站的经验
  • python_bomb----数据类型总结
  • supervisor 永不挂掉的进程 安装以及使用
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue 2.3、2.4 知识点小结
  • vue中实现单选
  • Wamp集成环境 添加PHP的新版本
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 分享一份非常强势的Android面试题
  • 前端设计模式
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一些关于Rust在2019年的思考
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #宝哥教你#查看jquery绑定的事件函数
  • #大学#套接字
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (pojstep1.3.1)1017(构造法模拟)
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (未解决)macOS matplotlib 中文是方框
  • (一)基于IDEA的JAVA基础12
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)详解PHP处理密码的几种方式
  • ./和../以及/和~之间的区别
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core 中的路径问题
  • .NET 设计一套高性能的弱事件机制
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件