WPF / C # ile IE WebBrowser denetimi yerine Chromium gömme seçenekleri


158

Internet Explorer tabanlı WPF WebBrowser denetimi bazı klavye ve odak sorunları ile bellek sızıntısı sorunlarından muzdarip . Bu sorunlara alternatif bir çözüm olarak, HTML düzenleme tabanlı WPF / C # projemizde WebBrowser kontrolü yerine Chromium'u barındırmak için mevcut seçenekleri düşünüyoruz. Benzer sorular burada daha önce de sorulmuştu . Yanıtları okudum ve kendi araştırmamı yaptım, ancak üretim kalitesinde projelerde aşağıdaki seçeneklerden herhangi birini gerçekten kullanan insanlardan biraz daha fazla geri bildirim almayı umuyorum :

Awesomium ve Awesomium.NET

Çok uygun görünüyor, ancak projenin açık kaynak olmaması ve tam kaynağın kolayca bulunmaması hoşuma gitmiyor. Ayrıca, ekran dışı render işlemi gerçekten bağımlı olduğumuz bir şey olmadığından, projemiz için aşırıya kaçabilir.

CEF için Chromium Gömülü Çerçeve (CEF) ve .NET bağlamaları

Bu muhtemelen şu anda mevcut olan en iyi seçenektir. Proje canlı ve aktif görünüyor, şu anda Chrome v27 ile senkronize. CEF3, Chrome çoklu işlem mimarisini kullanır. Ayrıca Adobe ona bazı onaylar veriyor gibi görünüyor .

Google'ın Chrome Çerçevesi

Orijinal amacı IE ve Firefox için bir HTML5 eklentisi olmakla birlikte, aslında bağımsız ActiveX kontrolü olarak da çalışır, bu yüzden WPF ile kullanmak için sarabilirim. Bu bir ortaya çıkarır yeterli API iç web sayfası ile etkileşim için ( onmessage, addEventListener/removeEventListener, postMessage). Google etmektir farkındayım durdurma Chrome Frame, ama kaynaklar Krom depoda kalır varsayalım. Gittikçe en son Chromium koduyla güncellemek zor olmamalı ve bunun üzerinde tam kontrolümüz olacaktı.

WebKit .NET sarmalayıcısı

Tam olarak Chromium tabanlı değil ve V8 motoru kullanmıyor, bu yüzden gerçekten bir seçenek değil.

Göz ardı edebileceğim başka bir seçenek var mı?

Birinin deneyimini gerçek yaşamda, üretim kalitesinde bir WPF projesi için yukarıdaki seçeneklerden herhangi biriyle paylaşması durumunda çok memnun olurum. Entegrasyon, lisanslama veya dağıtımla ilgili sonuçlarınız oldu mu? Teşekkür ederim.

[EDITED] Ayrıca cömert bir ödül teklifini sunarak bu soruyu desteklediği için artlung'a teşekkür etmek istiyorum .

Yanıtlar:


124

Chromium'u (CEF, Chrome Frame, Awesomium) gömmek için en dikkate değer çözümleri zaten listelediniz. Önemli olan başka proje yok.

Hala Berkelium projesi var (bkz. Berkelium Sharp ve Berkelium Managed ), ancak Chromium'un eski bir versiyonunu emebiliyor.

CEF en iyi bahistir - tamamen açık kaynaklıdır ve sıklıkla güncellenir. Chromium'un en son sürümünü gömmenizi sağlayan tek seçenektir. Şimdi Per Lundberg aktif olarak CEF 3'ü CefSharp'a taşımak için çalışıyor , bu gelecek için en iyi seçenek. Ayrıca Xilium.CefGlue da var , ancak bu CEF için düşük seviyeli bir API sağlıyor , CEF'nin C API'sine bağlanıyor. CefSharp ise CEF'nin C ++ API'sine bağlanır.

Adobe, CEF kullanan tek büyük oyuncu değil, CEF wikipedia sayfasındaki CEF kullanan diğer önemli uygulamalara bakın .

Proje kullanımdan kaldırıldığı için Chrome Frame'in güncellenmesi anlamsız .


Ayrıca şeylerin yarısının işe yaramayacağını söylemeyi unuttun ... çerezleri temizlemek, önbellek .. vekilleri ayarlamak vb .. Sadece Awesomium kullanın ve sorununuzu kaydedin.

4
Hehe, güzel cevap Czarek, krediniz için teşekkürler. :) (Şimdiye kadar bunu görmemiştim)
Per Lundberg

4
Tabii ki, belirtmeye değer: Açık kaynak kodlu herhangi bir projede açıkça "eksik" şeyler olabilir. Ne Xilium.CefGlue ne de CefSharp bu kuralın istisnası değildir. Açık kaynaklarla ilgili güzel bir şey, daha küçük bir soruna bakmak için (makul derecede düşük) bir zaman harcayabileceğiniz ve düzeltmenizi dahil edebileceğinizdir. Bunu zaman zaman CefSharp ile görüyoruz ve oldukça düzgün.
Per Lundberg

1
Yanılıyorum ama CefSharp tüm söylendi 50MB üzerinde DLL gerektirmez beni düzelt? Bu, dev bir kurulum kurulumuyla sonuçlanır. Libcef.dll büyük bir bağımlılık olarak listelenir ve 38MB
Krafty

2
@Krafty Kurulum ayarları, 7z gibi algoritmalar kullanarak paketlenmesine izin verir ve bu da boyutu 55 MB -> 17 MB arasında azaltılır. 152 MB ambalajsız ve 40 MB kurulum paketli Google Chrome ile karşılaştırıldığında CefSharp boyutu fazla değildir.
Czarek Tomczak

11

Bir süre önce tam olarak aynı zorluğu yaşadık. WPF tabanlı ve .NET 3.5'i destekleyen CEF3 açık kaynak kütüphanesine gitmek istedik.

İlk olarak, CEF'in yazarı burada farklı diller için bağlayıcılığı listeledi .

İkincisi, Xilium.CefGlue adı verilen ve onunla iyi bir başarı elde eden açık kaynaklı .NET CEF3 bağlaması ile devam ettik . Bir şeyin beklediğiniz gibi çalışmadığı durumlarda, yazar genellikle yerleşik bitbucket izleyicide açılan sorunlara çok duyarlıdır

Şimdiye kadar bize iyi hizmet etti. Yazar, en son CEF3 sürümlerini ve düzenli olarak hata düzeltmelerini desteklemek için kütüphanesini günceller.


2
Bu aslında bir nokta ("diğer taraftan" geliyor, bu CefSharp olmak) - CefSharp yeni VS araç setleri ile 3.5 destekleyen sorunlar nedeniyle sadece birkaç aydan beri 4.0. (VS2010 +, C ++ / CLI ile eski çerçeveleri destekleyemez, bu biraz üzücüdür çünkü bizi .NET 4 veya gerçekten eski bir Visual Studio sürümü kullanmaya zorlar ...)
Per Lundberg

8

Işte başka biri:

http://www.essentialobjects.com/Products/WebBrowser/Default.aspx

Bu da en son Chrome motoruna dayanıyor, ancak kullanımı CEF'den çok daha kolay. Sadece referans ve kullanmak tek bir .NET dll's.


Destek de harika.
huseyint

3
Bu web sitesinde temel bilgiler eksik görünüyor - hangi Chrome sürümünü içeriyor?
Czarek Tomczak

2
Ah-oh, özgür değil. ÜCRETSİZ DEĞİL. Bu adamlar ne düşünüyordu? :)
dkellner

Burada, deneme sürümü olsa da, ücretsiz olmadığı belirtilmelidir.
ewilan

8

Ait olduğum ekibin geliştirdiği DotNetBrowser kütüphanesine bir göz atın . .NET uygulamasına gömülmesi oldukça kolay olan Chromium tabanlı WPF ve WinForms tarayıcı kontrolleri sağlar. HTML5, CSS3 ve JavaScript dahil tüm modern web standartlarını destekler. Oluşturulan sayfa Google Chrome'daki gibi görünür.

Kütüphane Chromium'un çok işlemli mimarisini devralır - her web sayfası ayrı bir Chromium işleminde işlenir ve uygulama eklenti çökmesinden veya web sayfasında beklenmedik bir hatadan sonra bile çalışmaya devam eder.

DotNetBrowser tarafından sağlanan diğer bazı yararlı özellikler şunlardır: yük olaylarını dinlemek, ağ etkinliğini işlemek, proxy'yi yapılandırmak, kullanıcı işlemlerini simüle etmek, çerezlerle çalışmak, DOM'a erişmek ve değiştirmek, DOM olaylarını dinlemek, .NET'ten JavaScript'i aramak mümkündür ve tersi de geçerlidir, web sayfasında web kamerası ve mikrofon kullanın, WebRTC tabanlı iletişim kurun ve daha fazlasını yapın .

Check out programlama arayüzünü daha fazla ayrıntı için.

Aşağıdaki kod snippet'i, nasıl bir BrowserView oluşturulacağını, bir Forma nasıl yerleştirileceğini ve bir URL'nin nasıl yükleneceğini gösterir:

using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.WinForms;

namespace WinForms.DotNetBrowser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            BrowserView browserView = new WinFormsBrowserView();
            Controls.Add((Control) browserView);
            browserView.Browser.LoadURL("http://www.youtube.com");
        }
    }
}

Yukarıdaki örneği çalıştırdığınızda aşağıdaki çıktıyı alırsınız:

resim açıklamasını buraya girin

Kütüphane ticari. Ticari lisanslar, farklı ekip boyutları için destek paketleri içerir. Kütüphanenin kaynak kodunu satın almak da mümkündür.

Kendi sayfasında yanında bileşeni olarak kullanılabilir Nuget paketinin gibi VSIX paketinde Visual Studio Pazar Yerinde.


1
geçerli görünüyor ve deneme sürümünü uygulamama yerleştirdim. Tek sorun, ticari bir ürün olması ve lisansın çok ucuz olmamasıdır. Aksi takdirde, bana sağlam görünüyor.
DoronG

Ne yazık ki DotNetBrowser ücretsiz DEĞİLDİR! : /
Deniz

4

Awesomium.NET kullandım. Açık kaynak olmamasını ve oldukça eski bir Webkit oluşturma motorunu kullanmasını sevmeme rağmen, kullanımı gerçekten çok kolay. Bu, verebileceğim tek onayla ilgili.


1
Bu proje için kullanıcı tabanınızın ne kadar büyük olduğunu paylaşır mısınız, sadece kabaca?
noseratio

Projeyi hiç konuşlandırmadım, bu yüzden kullanıcı tabanı sıfırdı. Sadece seçenekleri kendim deniyordum.
Ming Slogar

2
Awesomium tabanlı bir C # uygulamasını destekleyen aylarca acı çektim; C ++ oyunları için kaya olabilir ama C # 'da tarayıcı kontrolü düpedüz buggy. Karmaşık dağıtım (GAC'ye bir şeyler eklemek için garip yükleyicilerine ihtiyacınız var), buggy davranışı (bazen siyah bir ekranla başlar, kullanıcı uygulamayı manuel olarak yeniden başlatmalıdır) ve yavaş hızı (web sayfaları yüklendikçe görüntülenmez) , sayfa tamamen / yarı yüklenene kadar askıda kalıyor ve yavaş bir makinede başlatılması 5-10 saniye sürüyor)
TheFlash

5
Sonunda CefSharp ile gittim ve sonuçlar şaşırtıcıydı. <100 ms başlatma (yani anlık başlatma) ve "hata" yok. Şeyler sadece işe yarıyor. Olması gerektiği gibi. Ayrıca, CACSharp'ın GAC'ye eklenmesi gerekmez, bu nedenle yükleyici değişikliği gerekmez. Sadece dosyalarınızı kopyalayıp gidin. CEF / CefSharp'ın test ettiğim her Mozilla / WebKit C # kütüphanesinden daha iyi olduğunu belirttim mi? Oh ve göklerin uğruna IE kullanmayın. İşe yarıyor. Evet, öyle, ama tamamen özellik eksik ve çok kötü performans (hız).
TheFlash

1
@RobinRodricks Tam olarak benim deneyimim. Neredeyse yaklaşımı bıraktım, ama sonra CefSharp buldum :-) (Ve bu günlerde yazıcı sürücülerinin DVD'ye geldiği birkaç MB daha fazla kimin umurunda :-)?)
Xan-Kun Clark-Davis

4

GÜNCELLEME 2018 MAYIS:

Alternatif olarak, Edge tarayıcısını gömebilirsiniz, ancak yalnızca Windows 10'u hedefleyebilirsiniz.

İşte çözüm.


2

WPF RSS okuyucumla aynı sorunu yaşadım, aslında Awesomium ile gittim (sanırım sürüm 1.6) Awesomium harika. Önbellekleme (resimler ve HTML içeriği), JavaScript yürütme, indirme işlemlerini durdurma vb. İçin çok fazla kontrole sahip olursunuz. Aynı zamanda süper hızlı. İşlem yalıtımı, tarayıcı çöktüğünde uygulamanın çökmemesi anlamına gelir.

Ama aynı zamanda ağır, hatta sürüm oluşturma yaklaşık 10-15mb ekler (tam sayıyı hatırlayamıyorum) ve dolayısıyla hafif bir başlangıç ​​cezası. Daha sonra, IE tarayıcı kontrolü ile yaşadığım tek sorun, JavaScript hatalarını her zaman tekrarlayacağıydı. Ancak bu aşağıdaki snippet ile düzeltildi.

Uygulamamı XP veya Vista'da neredeyse hiç kullanmadım ama Win 7 ve üstünde hiç çökmedi (en azından IE tarayıcı kontrolünü kullandığım için değil)

IOleServiceProvider sp = browser.Document as IOleServiceProvider;
if (sp != null)
{
    IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
    Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");

    webBrowser;
    sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
    if (webBrowser != null)
    {
        webBrowser.GetType().InvokeMember("Silent", 
                BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
    }
}

Cevap için teşekkürler. Sonunda Awesomium'dan IE'ye döndün mü?
noseratio

Evet yaptım. ve mutlu oldum. Konuşlandırılabilir küçük ve hiçbir başlangıç ​​donma oldu bu yüzden ClickOnce kullanın!
Sameer Vartak

Teşekkürler, cevabınızı oyladım. BTW, iç arayüzü almanın başka bir yolu var IWebBrowser2.
noseratio

Güzel. Activex denetimleri WPF'de nasıl çalışır? Oylama için teşekkürler :-)
Sameer Vartak

Üzgünüz, referans bağlantısını dikkatle okumadım. Evet, bu bir XAML örneği ve işe yarıyor. Teşekkürler.
Sameer Vartak

1

Microsoft, Chromium'u Windows 10, Windows 8.1 veya Windows 7'ye katıştırmak için harika ve ücretsiz bir seçenek sağlayacak olan " Microsoft Edge WebView2 " WPF denetimini yayınlıyor Microsoft.Web.WebView2.


Bu harika bir seçenek, ancak 2020 olmasına rağmen ve bugünlerde Chromely gibi bir platformlar arası çözüm arıyordum .
noseratio

1
Bir masaüstü uygulamasına veya bir web uygulaması gibi oluşturulan bir masaüstü uygulamasına küçük bir web öğesi eklemeye baktığınıza bağlı olduğunu düşünüyorum. WebView2'yi yalnızca bir masaüstü uygulamasına küçük bir web öğesi olsaydı kullanacağınızı düşünüyorum.
scottheckel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.