• 【整理总结】代码沉淀


    .NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework

    web: https://github.com/cefsharp/CefSharp

    nuget: Install-Package CefSharp.Wpf

    比较流行的第三方内嵌浏览器组件,虽然还是一如既往的坑,但是最起码很多人踩,所以就用它了。


    更多相关项目,请访问代码沉淀目录

    重要提示:请注意项目的版本,以官方最新版本为准。


    在很久很久之前,就有很多人提过在一个窗体程序内嵌入浏览器,于是我最后也用到了,于是就记录一下踩得坑,留作备忘。

    1. cef子进程的开始与关闭,如果你的程序出现了子进程的这种问题,请调用:

    CefSharp.Cef.Shutdown();

    2. 右键菜单问题,很多配置cefsharp都考虑到了,虽然实现起来各种麻烦。

    class MyCefMenuHandler : CefSharp.IContextMenuHandler
    {
        // 其它方法的实现不是重点。
        // 其它参数也不是重点。
        public void OnBeforeContextMenu(IMenuModel model)
        {
             model.Clear();
        }
    }

    3. 网页语言问题,很多网站会根据请求头的区域标识,返回对应的语言的网页,比如微信,所以我们要标识我首选就是中文,先给我返回我认识的国语网页。

        // 其他方法不是重点(不过实现一次接口你都想死,太多方法了!)
        // 其他参数也不是重点
        // 一定要重新覆盖访问头,直接赋值没卵用!
        public CefReturnValue OnBeforeResourceLoad(IRequest request)
        {
          var headers = request.Headers;
          headers.Set("accept-language", "zh-CN,zh;q=0.8,en;q=0.6");
          request.Headers = headers;
          return CefSharp.CefReturnValue.Continue;
        }

    4. 大家可能都遇到的问题,WPF专用的CefSharp控件,不支持设计时,这你就没法子了,我是觉得烦就后台生成浏览器控件的实例,这一帮官方的开发人员也真是够懒的,到现在了还不添加设计时支持,真是吃干饭的。

    5. 我看到exe同级目录下那么多dll,就蛋疼,于是就做了资源转移,其他dll用的“Costura.Fody”,至于Cef方面的,就只能老老实实转一大圈了。

     1 // 首先,让Costura.Fody组件不合并CefSharp相关的资源文件,因为非托管啥的资源还有子线程,你不可能真的都打包。
     2 // FodyWeavers.xml
     3 <Weavers>
     4   <Costura ExcludeAssemblies="CefSharp|CefSharp.Core|CefSharp.Wpf"/>
     5 </Weavers>
     6 // 接下来,我们不是把dll挪到别的目录么,程序启动搜索dll,就要多一些地方,比如我放在子目录里。
     7 // App.Config
     8 <configuration>
     9   <runtime>
    10     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    11       <probing privatePath="x86cef" />
    12     </assemblyBinding>
    13   </runtime>
    14 </configuration>
    15 // 接下来,把cef相关的20个文件,locales目录的53个文件全扔到x86cef目录里,并修改Cef初始化配置。
    16     internal static void Build()
    17     {
    18       string lib, browser, locales, res;
    19       // Assigning file paths to varialbles
    20       lib = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86ceflibcef.dll");
    21       browser = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86cefCefSharp.BrowserSubprocess.exe");
    22       locales = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86ceflocales");
    23       res = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86cef");
    24       var settings = new CefSettings();
    25       settings.BrowserSubprocessPath = browser;
    26       settings.LocalesDirPath = locales;
    27       settings.ResourcesDirPath = res;
    28       Cef.Initialize(settings, true, null);
    29     }
    View Code
  • 相关阅读:
    spring属性的三种注入方法
    spring整合web项目原理
    IOC与DI区别
    近期的一些思考(前后台对接方面)
    关于form表单回车自动刷新
    css画心形、三角形的总结
    网页播放器与播放器定制
    css实现div内凹角样式
    20190614笔记(颜色透明度,css,filter,滤镜,计算属性,json和formData转换)
    关于注册页面的总结
  • 原文地址:https://www.cnblogs.com/3Tai/p/7095392.html
Copyright © 2020-2023  润新知