C# 在WPF/C中嵌入Firefox/Gecko#

C# 在WPF/C中嵌入Firefox/Gecko#,c#,wpf,firefox,browser,gecko,C#,Wpf,Firefox,Browser,Gecko,我想在我的WPF项目中嵌入当前的Gecko。 我知道Winforms主机和Skybound Gecko库是有可能的 但我的应用程序不使用标准wpf主题。它是另一个控件,控件的滚动条将不会设置样式。此外,这是一个为Firefox3设计的旧库 在WPF中使用当前Gecko的最佳库/策略是什么?您应该看看这些选项,它们都使用铬: 付费:(含草甘膦) (对初创公司免费) (使用冬虫夏草) 免费:(基于Chrome嵌入式框架) (提供WinForms和WPF,但使用CEF1) (使用CEF3,因此支

我想在我的WPF项目中嵌入当前的Gecko。 我知道Winforms主机和Skybound Gecko库是有可能的

但我的应用程序不使用标准wpf主题。它是另一个控件,控件的滚动条将不会设置样式。此外,这是一个为Firefox3设计的旧库


在WPF中使用当前Gecko的最佳库/策略是什么?

您应该看看这些选项,它们都使用铬:

付费:(含草甘膦)

  • (对初创公司免费)
  • (使用冬虫夏草)
免费:(基于Chrome嵌入式框架)

  • (提供WinForms和WPF,但使用CEF1)
  • (使用CEF3,因此支持Chrome的多进程模型、flash插件和WebGL)
    • WebKit.Net是免费的:


      他们的GitHub页面似乎最近更新了:

      您可能可以使用WindowsFormsHost,教程在这里

      有趣的是

      WindowsFormsHost host = new WindowsFormsHost(); 
      GeckoWebBrowser browser = new GeckoWebBrowser(); 
      host.Child = browser; 
      gridWeb.Children.Add(host);
      

      这是我的答案。正如Roman所说,Gecko基于Winforms,而不是WPF,因此必须通过WindowsFormsShost合并

    • 创建VisualStudio项目后,使用命令install package Geckofx45通过NuGet安装Gecko包

    • 确保已将WindowsFormsIntegration和System.Windows.Forms引用添加到项目中

    • 在配置管理器中,将配置设置为32位,以消除编译器警告

    • 更新MainWindow.xaml“Grid”元素,为其指定“Loaded”事件的名称和处理程序


    • 我很难使用SO代码编辑器,因此要获得更详细的解释和屏幕截图,请参见此。

      这是一个老问题,但我提出了一个伪解决方案,将GeckoFX添加为XAML标记,例如:

      <local:GeckoBrowser Width="400" Height="250" />
      
      现在,您可以在WPF中使用标记,在UserControl存在的同一个项目中


      我一直试图让它作为库中的控件工作,这样我就可以很容易地将它移植到任何其他项目/解决方案,但它总是给我一个关于mozglue.dll丢失的错误。我怀疑这是由于Xpcom.Initialize(“Firefox”)引起的,但我需要进一步调查。

      它必须是FF还是您只需要一个合适的浏览器?它不一定是FF,但最好是FF。类似于SkyboundGecko的一系列功能也可以(基本导航和鼠标移动事件,用于在光标处读取htmldom)。IE对我来说是没有选择的问题是关于Gecko的,不是webkit/Blink你是对的,但在我给出这个答案的时候,没有使用Gecko的解决方案。而不是说我给出了另一种选择。我在回答之前问过OP。你应该明白,它都被谷歌编入了索引,误导了很多搜索特定答案的人。无论如何,这是我的观点,我不想为它争论:)@AlexLapa它也被其他引擎索引;)也许原始海报上关于嵌入Google Chrome的答案是可以的,但当我读到他/她最初的问题时,答案并不明显。这是我看到的唯一解决这个问题的答案。据我所知,壁虎不能用于“纯”WPF。我很高兴在这个问题上得到纠正。您必须使用WPF WindowsFormsShost嵌入基于WinForms的Gecko浏览器。
        public MainWindow()
        {
           InitializeComponent();
           Gecko.Xpcom.Initialize("Firefox");
        }
      
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
           WindowsFormsHost host = new WindowsFormsHost();
           GeckoWebBrowser browser = new GeckoWebBrowser();
           host.Child = browser;
           GridWeb.Children.Add(host);
           browser.Navigate("http://www.google.com");
        }
      
      <local:GeckoBrowser Width="400" Height="250" />
      
      <UserControl x:Class="WpfApp1.Browser"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
          xmlns:local="clr-namespace:WpfApp1"
          mc:Ignorable="d" 
          d:DesignHeight="300" d:DesignWidth="300">
          <Border x:Name="border" Background="Black" Margin="0"></Border>  
      </UserControl>
      
      public partial class Browser : UserControl
      {
          WindowsFormsHost host = new WindowsFormsHost();
          GeckoWebBrowser browser = new GeckoWebBrowser();
      
          public Browser()
          {
              InitializeComponent();
              Xpcom.Initialize("Firefox");
              browser.Navigate("http://www.google.com");
              host.Child = browser;
              border.Child = host;
          }
      }