Opsi untuk menyematkan Chromium daripada kontrol IE WebBrowser dengan WPF / C #

158

Kontrol WPF WebBrowser berbasis Internet Explorer mengalami beberapa masalah keyboard dan fokus dan masalah kebocoran memori . Sebagai solusi alternatif untuk masalah ini, kami mempertimbangkan opsi yang tersedia untuk hosting Chromium alih-alih kontrol WebBrowser dalam proyek WPF / C # kami yang berbasis pada pengeditan HTML. Pertanyaan serupa telah diajukan di sini sebelumnya. Saya telah membaca jawaban dan melakukan penelitian sendiri, tetapi saya berharap mendapatkan lebih banyak umpan balik dari orang-orang yang benar-benar menggunakan salah satu opsi berikut dalam proyek-proyek berkualitas produksi :

Awesomium dan Awesomium.NET

Kelihatannya sangat tepat, tetapi saya tidak suka fakta bahwa proyek ini bukan open-source dan sumber lengkapnya tidak mudah tersedia. Juga, ini mungkin merupakan pekerjaan berat untuk proyek kami, karena rendering di luar layar bukanlah sesuatu yang benar-benar kami andalkan.

Chromium Embedded Framework (CEF) dan .NET binding untuk CEF

Ini mungkin opsi terbaik yang saat ini tersedia. Proyek ini tampaknya hidup dan aktif, saat ini sedang disinkronkan dengan Chrome v27. CEF3 menggunakan arsitektur multi-proses Chrome. Sepertinya Adobe juga memberikan beberapa dukungan .

Google Chrome Frame

Walaupun tujuan awalnya adalah untuk menjadi plugin HTML5 untuk IE dan Firefox, sebenarnya berfungsi sebagai kontrol ActiveX mandiri juga, jadi saya bisa membungkusnya untuk digunakan dengan WPF. Itu memperlihatkan API yang cukup untuk interaksi dengan halaman web bagian dalam ( onmessage, addEventListener/removeEventListener, postMessage). Saya sadar Google akan menghentikan Chrome Frame, tetapi saya berasumsi sumbernya akan tetap ada di repositori Chromium. Seharusnya tidak sulit untuk memperbaruinya dengan kode Chromium terbaru saat ini, dan kami akan memiliki kontrol penuh atas ini.

WebKit .NET wrapper

Tidak persis berbasis Chromium dan tidak menggunakan mesin V8, jadi itu bukan pilihan.

Apakah ada opsi lain yang mungkin saya abaikan?

Saya akan sangat menghargai jika seseorang membagikan pengalamannya dengan salah satu opsi di atas untuk kehidupan nyata, proyek WPF berkualitas. Apakah Anda memiliki implikasi integrasi, lisensi, atau penyebaran? Terima kasih.

[Diedit] Saya juga ingin mengucapkan terima kasih kepada artlung karena memberikan pertanyaan ini dorongan dengan memberikan tawaran karunia yang murah hati.

noseratio
sumber

Jawaban:

124

Anda telah mendaftarkan solusi yang paling terkenal untuk menanamkan Chromium (CEF, Frame Chrome, Awesomium). Tidak ada lagi proyek yang penting.

Masih ada proyek Berkelium (lihat Berkelium Sharp dan Berkelium Managed ), tetapi masih ada versi Chromium yang lama.

CEF adalah taruhan terbaik Anda - sepenuhnya open source dan sering diperbarui. Ini satu-satunya opsi yang memungkinkan Anda untuk menyematkan versi Chromium terbaru. Sekarang Per Lundberg secara aktif mengerjakan porting CEF 3 ke CefSharp , ini adalah opsi terbaik untuk masa depan. Ada juga Xilium.CefGlue , tetapi yang ini menyediakan API tingkat rendah untuk CEF, itu mengikat C API CEF. CefSharp di sisi lain mengikat C ++ API CEF.

Adobe bukan satu-satunya pemain utama yang menggunakan CEF, lihat aplikasi terkenal lainnya menggunakan CEF pada halaman wikipedia CEF .

Memperbarui Chrome Frame tidak ada gunanya karena proyek telah dihentikan .

Czarek Tomczak
sumber
Anda lupa juga mengatakan bahwa setengah dari hal-hal itu tidak akan berfungsi .. seperti menghapus cookie, cache .. mengatur proxy dll. Cukup gunakan Awesomium dan simpan masalah Anda.
4
Hehe, jawab Czarek, terima kasih atas pujiannya. :) (belum melihat ini sampai sekarang)
Per Lundberg
4
Tentu saja, layak untuk ditunjukkan: Mungkin ada hal-hal yang "hilang" dalam setiap proyek open source. Baik Xilium.CefGlue maupun CefSharp tidak ada pengecualian untuk aturan itu. Hal yang menyenangkan tentang hal-hal sumber terbuka adalah Anda benar-benar dapat menghabiskan waktu (yang cukup rendah) untuk melihat masalah yang lebih kecil, dan memasukkan perbaikan Anda. Kami melihat bahwa dari waktu ke waktu dengan CefSharp dan itu cukup rapi.
Per Lundberg
1
Koreksi saya jika saya salah tetapi CefSharp tidak memerlukan DLL yang lebih dari 50MB semuanya diceritakan? Itu menghasilkan pengaturan instalasi raksasa. Libcef.dll terdaftar sebagai ketergantungan utama dan 38MB
Krafty
2
Pengaturan Instalasi @Krafty memungkinkan untuk mengemasnya menggunakan algoritma seperti 7z dan ini menghasilkan ukuran yang berkurang dari 55 MB -> menjadi 17 MB. Ukuran CefSharp tidak banyak jika dibandingkan dengan Google Chrome, yang 152 MB dibongkar dan 40 MB pengaturan dikemas.
Czarek Tomczak
11

Kami memiliki tantangan yang persis sama beberapa waktu lalu. Kami ingin pergi dengan perpustakaan open source CEF3 yang berbasis WPF dan mendukung .NET 3.5.

Pertama, penulis CEF sendiri mendaftar untuk bahasa yang berbeda di sini .

Kedua, kami melanjutkan dengan open source .NET CEF3 mengikat yang disebut Xilium.CefGlue dan sukses dengan itu. Dalam kasus di mana sesuatu tidak berfungsi seperti yang Anda harapkan, penulis biasanya sangat responsif terhadap masalah yang dibuka di built-in bitbucket tracker

Sejauh ini hal itu telah membantu kami dengan baik. Penulis memperbarui perpustakaannya untuk mendukung rilis CEF3 terbaru dan perbaikan bug pada basis reguler.

Artem
sumber
2
Ini sebenarnya titik (berasal dari "sisi lain", menjadi CefSharp dalam hal ini) - CefSharp hanya 4.0 sejak beberapa bulan, karena masalah mendukung 3.5 dengan VS toolets yang lebih baru. (VS2010 + tidak dapat mendukung kerangka kerja yang lebih lama dengan C ++ / CLI, yang agak menyedihkan karena memaksa kita untuk menggunakan .NET 4 atau versi Visual Studio yang benar-benar tua ...)
Per Lundberg
8

Ini satu lagi:

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

Yang ini juga didasarkan pada mesin Chrome terbaru tetapi jauh lebih mudah digunakan daripada CEF. Ini adalah .NET dll yang dapat Anda referensi dan gunakan.

Jason
sumber
Dukungannya juga fantastis.
huseyint
3
Informasi dasar tampaknya tidak ada di situs web itu - versi Chrome apa yang disertakan?
Czarek Tomczak
2
Uh-oh, tidak gratis. TIDAK GRATIS. Apa yang dipikirkan orang-orang ini? :)
dkellner
Harus dinyatakan di sini bahwa, meskipun ada versi uji coba, itu tidak gratis.
ewilan
8

Lihatlah DotNetBrowser perpustakaan dikembangkan oleh tim saya. Ini memberikan kontrol browser WPF dan WinForms berbasis Chromium, yang cukup mudah untuk dimasukkan ke dalam aplikasi .NET. Ini mendukung semua standar web modern termasuk HTML5, CSS3 dan JavaScript. Halaman yang dirender terlihat persis seperti di Google Chrome.

Perpustakaan mewarisi arsitektur multi-proses Chromium - setiap halaman web dirender dalam proses Chromium yang terpisah, dan aplikasi akan terus bekerja bahkan setelah plugin crash atau kesalahan tak terduga lainnya terjadi pada halaman web.

Berikut adalah beberapa fitur berguna lainnya, yang disediakan oleh DotNetBrowser: dimungkinkan untuk mendengarkan memuat acara, menangani aktivitas jaringan, mengkonfigurasi proxy, mensimulasikan tindakan pengguna, bekerja dengan cookie, mengakses dan memodifikasi DOM, mendengarkan acara DOM, memanggil JavaScript dari .NET dan sebaliknya, menggunakan kamera web dan mikrofon di halaman web, mengatur komunikasi berbasis WebRTC, dan banyak lagi .

Lihat Referensi API untuk lebih jelasnya.

Cuplikan kode di bawah ini menunjukkan cara membuat BrowserView, menanamkannya ke dalam Formulir, dan memuat URL:

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

Setelah Anda menjalankan contoh di atas, Anda akan mendapatkan output berikut:

masukkan deskripsi gambar di sini

Perpustakaan bersifat komersial. Lisensi komersial termasuk paket dukungan untuk ukuran tim yang berbeda. Dimungkinkan juga untuk membeli kode sumber perpustakaan.

Selain halamannya sendiri, komponen tersedia sebagai paket NuGet dan sebagai paket VSIX di Visual Studio Marketplace.

Vladimir
sumber
1
terlihat valid dan saya telah menyematkan versi uji coba di aplikasi saya. Satu-satunya masalah adalah bahwa itu adalah produk komersial dan lisensi tidak terlalu murah. Kalau tidak, terlihat kokoh bagiku.
DoronG
Sayangnya DotNetBrowser TIDAK GRATIS! : /
Deniz
4

Saya telah menggunakan Awesomium.NET. Meskipun saya tidak suka fakta bahwa itu bukan open-source, dan juga fakta bahwa ia menggunakan mesin rendering Webkit yang cukup lama, itu sangat mudah digunakan. Itu tentang satu-satunya dukungan yang bisa saya berikan.

Ming Slogar
sumber
1
Bisakah Anda membagikan seberapa besar basis pengguna Anda untuk proyek itu, secara kasar?
noseratio
Saya tidak pernah benar-benar menggunakan proyek ini, jadi basis pengguna adalah nol. Saya hanya bereksperimen dengan opsi sendiri.
Ming Slogar
2
Saya menderita selama berbulan-bulan mendukung aplikasi C # berbasis Awesomium; mungkin goyang untuk game C ++ tetapi di C # kontrol browser mereka benar-benar buggy Penyebaran yang rumit (Anda perlu penginstal aneh mereka untuk menambahkan barang ke GAC), perilaku buggy (kadang-kadang dimulai dengan layar hitam, pengguna harus memulai ulang aplikasi secara manual), dan kecepatannya yang lambat (halaman web TIDAK ditampilkan saat mereka memuat , itu agak hang sampai halaman penuh / setengah dimuat, dan butuh 5-10 detik untuk menginisialisasi pada mesin yang lambat)
TheFlash
5
Saya akhirnya pergi dengan CefSharp dan hasilnya luar biasa. <100 ms inisialisasi (mis. Init instan) dan tidak ada "bug". Barang hanya berfungsi. Seperti seharusnya. CefSharp juga TIDAK perlu ditambahkan ke dalam GAC sehingga tidak diperlukan perubahan pemasang. Cukup salin file Anda dan pergi. Apakah saya menyebutkan CEF / CefSharp lebih baik daripada setiap perpustakaan Mozilla / WebKit C # yang saya uji? Oh dan demi Tuhan jangan gunakan IE. Berhasil. Ya, memang, tetapi ini benar-benar fitur yang kurang dan kinerjanya sangat buruk (kecepatan).
TheFlash
1
@RobinRodricks Persis pengalaman saya juga. Saya hampir menyerah pendekatan, tetapi kemudian saya menemukan CefSharp :-) (Dan siapa yang peduli tentang beberapa MB lebih, hari ini, ketika driver printer datang pada DVD :-)?)
Xan-Kun Clark-Davis
4

PEMBARUAN 2018 MEI:

Atau, Anda dapat menyematkan browser Edge, tetapi hanya menargetkan windows 10.

Ini solusinya.

Rahul
sumber
2

Saya memiliki masalah yang sama dengan WPF RSS reader saya, saya awalnya menggunakan Awesomium (saya pikir versi 1.6) Awesomium hebat. Anda mendapatkan banyak kontrol untuk caching (gambar dan konten HTML), eksekusi JavaScript, intersepsi unduhan dan sebagainya. Ini juga sangat cepat. Proses isolasi berarti ketika browser mogok itu tidak crash aplikasi.

Tapi itu juga berat, bahkan rilis build menambahkan sekitar 10-15mb (tidak dapat mengingat angka pastinya) dan karenanya penalti awal yang sedikit. Saya kemudian menyadari, satu-satunya masalah yang saya miliki dengan kontrol browser IE adalah ia akan membuang kesalahan JavaScript setiap saat. Tapi itu diperbaiki dengan cuplikan berikut.

Saya hampir tidak menggunakan aplikasi saya di XP atau Vista tetapi pada Win 7 dan di atasnya tidak pernah crash (setidaknya bukan karena saya menggunakan kontrol browser IE)

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 });
    }
}
Sameer Vartak
sumber
Terima kasih atas jawabannya. Jadi, apakah Anda akhirnya kembali ke IE dari Awesomium?
noseratio
Ya saya lakukan. dan saya senang. Saya menggunakan ClickOnce sehingga penyebarannya kecil dan tidak ada pembekuan start-up!
Sameer Vartak
Terima kasih, saya telah memilih jawaban Anda. BTW, ada cara lain untuk mendapatkan IWebBrowser2antarmuka batin .
noseratio
Keren. cara kontrol Activex bekerja di WPF? Terima kasih telah memilih :-)
Sameer Vartak
Maaf, tidak membaca tautan referensi dengan cermat. Ya itu sampel XAML dan berfungsi. Terima kasih.
Sameer Vartak
1

Microsoft merilis kontrol WPF " Microsoft Edge WebView2 " yang akan memberi kita pilihan bagus dan gratis untuk menanamkan Chromium di Windows 10, Windows 8.1, atau Windows 7. Ini tersedia melalui Nuget sebagai paket Microsoft.Web.WebView2.

scottheckel
sumber
Ini adalah pilihan yang bagus, meskipun ini tahun 2020 dan hari ini saya akan mencari solusi lintas platform, misalnya Chromely .
noseratio
1
Saya pikir itu tergantung jika Anda ingin menambahkan hal-hal web kecil ke aplikasi desktop atau aplikasi desktop yang dibangun seperti aplikasi web. Saya pikir Anda hanya akan menggunakan WebView2 hanya jika itu adalah hal web kecil untuk aplikasi desktop.
scottheckel