【整理總結】代碼沉澱 - CefSharp - 比較流行的第三方內嵌瀏覽器組件

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

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

nuget: Install-Package CefSharp.Wpfgithub

比較流行的第三方內嵌瀏覽器組件,雖然仍是一如既往的坑,可是最起碼不少人踩,因此就用它了。web


更多相關項目,請訪問代碼沉澱目錄瀏覽器

重要提示:請注意項目的版本,以官方最新版本爲準。微信


 

在好久好久以前,就有不少人提過在一個窗體程序內嵌入瀏覽器,因而我最後也用到了,因而就記錄一下踩得坑,留做備忘。ide

1. cef子進程的開始與關閉,若是你的程序出現了子進程的這種問題,請調用:網站

CefSharp.Cef.Shutdown();

2. 右鍵菜單問題,不少配置cefsharp都考慮到了,雖然實現起來各類麻煩。ui

class MyCefMenuHandler : CefSharp.IContextMenuHandler
{
    // 其它方法的實現不是重點。
    // 其它參數也不是重點。
    public void OnBeforeContextMenu(IMenuModel model)
    {
         model.Clear();
    }
}

3. 網頁語言問題,不少網站會根據請求頭的區域標識,返回對應的語言的網頁,好比微信,因此咱們要標識我首選就是中文,先給我返回我認識的國語網頁。spa

    // 其餘方法不是重點(不過實現一次接口你都想死,太多方法了!)
    // 其餘參數也不是重點
    // 必定要從新覆蓋訪問頭,直接賦值沒卵用!
    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="x86\cef" />
12     </assemblyBinding>
13   </runtime>
14 </configuration>
15 // 接下來,把cef相關的20個文件,locales目錄的53個文件全扔到x86\cef目錄裏,並修改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, @"x86\cef\libcef.dll");
21       browser = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\CefSharp.BrowserSubprocess.exe");
22       locales = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\locales\");
23       res = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"x86\cef\");
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
相關文章
相關標籤/搜索