2011-09-26 105 views
8

我想將當前的Gecko嵌入到我的WPF項目中。 我知道Winforms-Host和Skybound-Gecko-Library是可能的。在WPF/C中嵌入Firefox/Gecko#

但我不使用標準wpf主題爲我的應用程序。這是另一個,控件的滾動條將不會被設置。此外,這是一箇舊的圖書館,是專爲Firefox 3而設計的。

哪個是最好的圖書館/策略使用WPF中的當前Gecko?

+0

是否必須是FF或者你只是想有一個正確的瀏覽器? – albertjan

+0

它不一定是ff,但會是最好的。像skybound gecko這樣的功能類似於一堆功能(基本導航和鼠標移動事件來讀取光標處的htmldom)。 IE瀏覽器是沒辦法,我 – 0xDEADBEEF

回答

8

你應該看看這些選項,它們都使用鉻:

支付:(Awesomium爲主)

免費:(鉻基於嵌入式框架)

+4

問題是關於壁虎,沒有的webkit /眨眼 –

+0

你是正確的,但在當時我給了這個答案有使用壁虎沒有解決辦法。而不是說我給了一個替代方案。 – albertjan

+0

我在回答之前詢問了OP。 – albertjan

4

你或許可以使用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); 
+0

這是我看到的唯一答案,解決這個問題。從我收集的內容來看,Gecko不能用於'純粹'的WPF。我很樂意在這方面予以糾正。您必須使用WPF WindowsFormsHost嵌入基於WinForms的Gecko瀏覽器。 – AndyUK

0

這裏就是我的回答。正如Roman所說的,Gecko是基於Winforms的,而不是基於WPF的,所以必須通過WindowsFormsHost來合併。

  1. 創建Visual Studio項目後,通過安裝在的NuGet包壁虎使用命令:安裝,包裝Geckofx45

  2. 確保WindowsFormsIntegration程序和System.Windows.Forms的引用都被添加到您的項目。

  3. 在配置管理器中,將您的配置設置爲32位,以擺脫編譯器警告。

  4. 更新主窗口。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

    0

    這是一個老問題,但我想出了一個僞解決方案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」),但我需要進一步調查。