在winform嵌入浏览器

正值我休息在家,陪着可爱的表妹时候,同学突然打电话问我,墩儿,你能做个报表么。
正好我闲啊,在家没啥事,就说可以,接下来了
此后才是噩梦的开始
要求很简单,把他的文本文档处理成报表就可以了

我太天真了。。。以为随便做一个就好就用php写了一个,感觉不够舒服又用java写了个,仔细想了几天,我日。。。他们不是软件公司啊。。。肯定要桌面程序。。。。fuck

然后拾起了大二后再没摸过的C#,下了个VS2017 community就开始做了,开始还挺简单,一边自学一边做,然后用MSChart做出来了 我日啊。。。好丑,而且 不!能!缩!放!
这是个死命的bug啊。。。我目光投向了嵌入浏览器一途,自带的webBrowser内置的是ie,调整ie的适应性比吃屎好不到哪去 我又去找怎么换这玩意内核,找了一个坑又一个坑以后发现了美妙的CefSharp,简直是救星,内置的是酷容心,完美!

//开发过程
//先创建工程,然后去工程属性调节所需要的.net版本 NUGET搜索cef下载你对应的版本(.net 4.0 对应 37.0.0版本)
命名空间引入 :
CefSharp;
CefSharp.WinForms;

//启动项目加入新类 
InitBrowser();
//启动类写入
public ChromiumWebBrowser browser;
    public void InitBrowser()
    {
        CefSettings setting = new CefSettings();
        //字符编码固定utf-8
        setting.Locale = "UTF-8";
        //读取文件地址
        string path = AppDomain.CurrentDomain.BaseDirectory + "\\chartPage.html";
        //转换地址字符串
        path = "file://" + path.Replace("\\", "/");
        //打入设定
        Cef.Initialize(setting);
        //打入文件地址
        browser = new ChromiumWebBrowser(path);
        //添加控件
        this.Controls.Add(browser);
        //控件填满窗体
        browser.Dock = DockStyle.Fill;
        //注册js对象 GetJson是新的class 函数一定要有get
        browser.RegisterJsObject("rtn", new GetJson());
    }
    //按键执行js fun = recall
      private void Button2_Click(object sender, EventArgs e)
    {
        browser.ExecuteScriptAsync("recall()");
    }
    //静态变量 用于传递数据
     class Staticvariable
    {
    public static string fileUrl;
    }
    //开放给js的接口
    class GetJson
    {
    public string ReturnJson
    {
        get
        {
        //特定国量化
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
            return "js";
        }

然后html里面写

    function recall() {
    setData(rtn.returnJson);
    }
    function setData(data){
     alert(data);
    }

就可以打通了,如果data = json的话我是通过string拼json然后给html的。。。然后用js的json格式化方法JSON.parse(data);来做的
还有个困扰我很久的无法引用js文件的问题,换成cef以后完美解决

附上项目地址 https://github.com/hanasakari/WinfromEchartsDemo

发表评论

邮箱地址不会被公开。 必填项已用*标注