在WPF / C中嵌入Firefox / Gecko#

时间:2011-09-26 07:59:17

标签: c# wpf firefox browser gecko

我想在我的WPF项目中嵌入当前的Gecko。 我知道有Winforms-Host和Skybound-Gecko-Library的可能性。

但我没有在我的应用程序中使用标准的wpf-theme。它是另一个,控件的滚动条将不会被设置样式。此外,这是一个专为Firefox 3设计的旧库。

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

5 个答案:

答案 0 :(得分:8)

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

付款:(基于Awesomium)

免费:(基于Chrome嵌入式框架版)

答案 1 :(得分:5)

你可以使用WindowsFormsHost,这里的教程

有趣的部分是

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

答案 2 :(得分:2)

WebKit.Net是免费的:http://sourceforge.net/projects/webkitdotnet/

他们的GitHub页面似乎最近更新了:https://github.com/webkitdotnet

答案 3 :(得分:0)

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

  1. 创建Visual Studio项目后,使用以下命令通过NuGet安装Gecko软件包:Install-Package Geckofx45

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

  3. 在Configuration Manager中,将配置设置为32位,以消除编译器警告。

  4. 更新MainWindow.xaml'Gate'元素,为其提供名称和'Loaded'事件的处理程序

  5. <Grid
        Name="GridWeb"
        Loaded="Window_Loaded">     
    </Grid>
    

    1. 修改MainWindow.xaml.cs以合并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");
        }
      
    2. 我很难使用SO代码编辑器,因此有关详细说明和屏幕截图,请参阅此blog page

答案 4 :(得分:0)

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

<local:GeckoBrowser Width="400" Height="250" />

这可以通过简单地将整个事物包装在UserControl中来完成,例如:

<强> XAML:

<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>

<强> C#:

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;
    }
}

现在,您可以在WPF中使用UserControl所在的同一项目中的标记。

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