C# 在WPF/C中嵌入Firefox/Gecko#
我想在我的WPF项目中嵌入当前的Gecko。 我知道Winforms主机和Skybound Gecko库是有可能的 但我的应用程序不使用标准wpf主题。它是另一个控件,控件的滚动条将不会设置样式。此外,这是一个为Firefox3设计的旧库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和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合并
我很难使用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;
}
}