我想將當前的Gecko嵌入到我的WPF項目中。 我知道Winforms-Host和Skybound-Gecko-Library是可能的。在WPF/C中嵌入Firefox/Gecko#
但我不使用標準wpf主題爲我的應用程序。這是另一個,控件的滾動條將不會被設置。此外,這是一箇舊的圖書館,是專爲Firefox 3而設計的。
哪個是最好的圖書館/策略使用WPF中的當前Gecko?
我想將當前的Gecko嵌入到我的WPF項目中。 我知道Winforms-Host和Skybound-Gecko-Library是可能的。在WPF/C中嵌入Firefox/Gecko#
但我不使用標準wpf主題爲我的應用程序。這是另一個,控件的滾動條將不會被設置。此外,這是一箇舊的圖書館,是專爲Firefox 3而設計的。
哪個是最好的圖書館/策略使用WPF中的當前Gecko?
你應該看看這些選項,它們都使用鉻:
支付:(Awesomium爲主)
免費:(鉻基於嵌入式框架)
WebKit.Net是自由的: http://sourceforge.net/projects/webkitdotnet/
他們GitHub的頁面似乎已被更多最近更新:https://github.com/webkitdotnet
你或許可以使用WindowsFormsHost,教程這裏
https://nhabuiduc.wordpress.com/2014/09/18/geckofx-net-webbrowser-setup-and-features/
最有趣的部分是
WindowsFormsHost host = new WindowsFormsHost();
GeckoWebBrowser browser = new GeckoWebBrowser();
host.Child = browser;
gridWeb.Children.Add(host);
這是我看到的唯一答案,解決這個問題。從我收集的內容來看,Gecko不能用於'純粹'的WPF。我很樂意在這方面予以糾正。您必須使用WPF WindowsFormsHost嵌入基於WinForms的Gecko瀏覽器。 – AndyUK
這裏就是我的回答。正如Roman所說的,Gecko是基於Winforms的,而不是基於WPF的,所以必須通過WindowsFormsHost來合併。
創建Visual Studio項目後,通過安裝在的NuGet包壁虎使用命令:安裝,包裝Geckofx45
確保WindowsFormsIntegration程序和System.Windows.Forms的引用都被添加到您的項目。
在配置管理器中,將您的配置設置爲32位,以擺脫編譯器警告。
更新主窗口。XAML '網格' 元素給它的名稱和該處理程序的 '加載' 事件
<Grid
Name="GridWeb"
Loaded="Window_Loaded">
</Grid>
修改主窗口。 xaml.cs合併壁虎以及使其導航到加載頁面:
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");
}
我很難用SO代碼編輯器,因此對於更詳細的解釋和截圖,看到這個blog page。
這是一個老問題,但我想出了一個僞解決方案GeckoFX添加爲XAML標記,如:
<local:GeckoBrowser Width="400" Height="250" />
這可以通過簡單地在用戶控件這樣的包裝整個事情來完成爲:
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」),但我需要進一步調查。
是否必須是FF或者你只是想有一個正確的瀏覽器? – albertjan
它不一定是ff,但會是最好的。像skybound gecko這樣的功能類似於一堆功能(基本導航和鼠標移動事件來讀取光標處的htmldom)。 IE瀏覽器是沒辦法,我 – 0xDEADBEEF