Tùy chọn để nhúng Chromium thay vì điều khiển IE WebBrowser với WPF / C #


158

Điều khiển WPF WebBrowser dựa trên Internet Explorer bị một số vấn đề về bàn phím và tiêu điểmrò rỉ bộ nhớ . Là một giải pháp thay thế cho những vấn đề này, chúng tôi đang xem xét các tùy chọn có sẵn để lưu trữ Chromium thay vì kiểm soát WebBrowser trong dự án WPF / C # của chúng tôi dựa trên chỉnh sửa HTML. Các câu hỏi tương tự đã được hỏi ở đây trước đây. Tôi đã đọc câu trả lời và thực hiện nghiên cứu của riêng mình, nhưng tôi hy vọng sẽ nhận được thêm một số phản hồi từ những người thực sự đã sử dụng bất kỳ tùy chọn nào sau đây trong các dự án chất lượng sản xuất :

AwesomiumAwesomium.NET

Nó có vẻ rất phù hợp, nhưng tôi không thích thực tế dự án không phải là nguồn mở và nguồn đầy đủ không dễ dàng có sẵn. Ngoài ra, nó có thể là một quá mức cần thiết cho dự án của chúng tôi, vì kết xuất ngoài màn hình không phải là thứ chúng tôi thực sự phụ thuộc.

Liên kết nhúng Chromium (CEF)các ràng buộc .NET cho CEF

Đây có lẽ là lựa chọn tốt nhất hiện có. Dự án dường như vẫn còn sống và đang hoạt động, hiện đang được đồng bộ hóa với Chrome v27. CEF3 sử dụng kiến ​​trúc đa quy trình của Chrome. Có vẻ như Adobe đang cung cấp cho nó một số chứng thực .

Khung Chrome của Google

Mặc dù mục đích ban đầu của nó là một plugin HTML5 cho IE và Firefox, nhưng nó thực sự hoạt động như một điều khiển ActiveX độc lập, vì vậy tôi có thể gói nó để sử dụng với WPF. Nó hiển thị một API đủ để tương tác với trang web bên trong ( onmessage, addEventListener/removeEventListener, postMessage). Tôi biết Google sẽ ngừng sử dụng Chrome Frame, nhưng tôi cho rằng các nguồn sẽ vẫn còn trong kho lưu trữ Chromium. Không khó để cập nhật nó với mã Chromium mới nhất khi chúng tôi đi và chúng tôi sẽ có toàn quyền kiểm soát việc này.

Trình bao bọc WebKit .NET

Không chính xác dựa trên Chromium và không sử dụng động cơ V8, vì vậy nó không thực sự là một tùy chọn.

Có lựa chọn nào khác mà tôi có thể đã bỏ qua không?

Tôi sẽ đánh giá rất cao nếu ai đó chia sẻ kinh nghiệm của cô ấy / anh ấy với bất kỳ tùy chọn nào ở trên cho dự án WPF thực tế, chất lượng sản xuất. Bạn đã có bất kỳ ý nghĩa tích hợp, cấp phép hoặc triển khai? Cảm ơn bạn.

[EDITED] Tôi cũng muốn cảm ơn artlung vì đã thúc đẩy câu hỏi này bằng cách cung cấp một ưu đãi tiền thưởng hào phóng.

Câu trả lời:


124

Bạn đã liệt kê các giải pháp đáng chú ý nhất để nhúng Chromium (CEF, Chrome Frame, Awesomium). Không có dự án nào quan trọng hơn.

Vẫn còn dự án Berkelium (xem Berkelium SharpBerkelium Managed ), nhưng nó đã bao trùm một phiên bản cũ của Chromium.

CEF là đặt cược tốt nhất của bạn - đó là nguồn mở hoàn toàn và được cập nhật thường xuyên. Đây là tùy chọn duy nhất cho phép bạn nhúng phiên bản Chromium mới nhất. Bây giờ Per Lundberg đang tích cực làm việc chuyển CEF 3 sang CefSharp , đây là lựa chọn tốt nhất cho tương lai. Ngoài ra còn có Xilium.CefGlue , nhưng cái này cung cấp API cấp độ thấp cho CEF, nó liên kết với API C của CEF. Mặt khác, CefSharp liên kết với API C ++ của CEF.

Adobe không phải là người chơi chính duy nhất sử dụng CEF, hãy xem các ứng dụng đáng chú ý khác sử dụng CEF trên trang wikipedia CEF .

Cập nhật Chrome Frame là vô nghĩa vì dự án đã ngừng hoạt động .


Bạn cũng quên nói rằng một nửa công cụ sẽ không hoạt động .. như xóa cookie, bộ đệm .. thiết lập proxy, v.v. Chỉ cần sử dụng Awesomium và lưu lại rắc rối của bạn.

4
Hehe, Czarek trả lời tốt đẹp, cảm ơn vì sự tín nhiệm. :) (chưa thấy điều này cho đến bây giờ)
Per Lundberg

4
Tất nhiên, đáng để chỉ ra: Rõ ràng có thể có những thứ "thiếu" trong bất kỳ dự án nguồn mở nào. Cả Xilium.CefGlue và CefSharp đều không có ngoại lệ cho quy tắc đó. Điều thú vị về công cụ nguồn mở là bạn thực sự có thể dành một lượng thời gian (khá thấp) để xem xét một vấn đề nhỏ hơn và bao gồm sửa lỗi của bạn. Thỉnh thoảng chúng tôi thấy rằng với CefSharp và nó khá gọn gàng.
Per Lundberg

1
Sửa lỗi cho tôi nếu tôi sai nhưng CefSharp không yêu cầu DLL có dung lượng lớn hơn 50 MB? Điều đó dẫn đến một thiết lập cài đặt khổng lồ. Các libcef.dll được liệt kê như một sự phụ thuộc lớn và nó là 38MB
Krafty

2
@Krafty Cài đặt cài đặt cho phép đóng gói bằng các thuật toán như 7z và điều này dẫn đến kích thước giảm từ 55 MB -> xuống 17 MB. Kích thước CefSharp không nhiều khi so sánh với Google Chrome, đó là 152 MB chưa được giải nén và 40 MB thiết lập được đóng gói.
Czarek Tomczak

11

Chúng tôi đã có chính xác cùng một thử thách một thời gian trước đây. Chúng tôi muốn sử dụng thư viện mã nguồn mở CEF3 dựa trên WPF và hỗ trợ .NET 3.5.

Đầu tiên, chính tác giả của CEF đã liệt kê ràng buộc cho các ngôn ngữ khác nhau ở đây .

Thứ hai, chúng tôi đã tiếp tục với liên kết .NET CEF3 mã nguồn mở được gọi là Xilium.CefGlue và đã thành công tốt đẹp với nó. Trong trường hợp một cái gì đó không hoạt động như bạn mong đợi, tác giả thường rất phản ứng với các vấn đề được mở trong trình theo dõi bitbucket tích hợp

Cho đến nay nó đã phục vụ chúng tôi tốt. Tác giả cập nhật thư viện của mình để hỗ trợ các bản phát hành CEF3 mới nhất và sửa lỗi trên các cơ sở thông thường.


2
Đây thực sự là một điểm (đến từ "phía bên kia", là CefSharp trong việc này) - CefSharp chỉ là 4.0 sau vài tháng, vì các vấn đề hỗ trợ 3.5 với bộ công cụ VS mới hơn. (VS2010 + không thể hỗ trợ các khung cũ hơn với C ++ / CLI, điều này hơi buồn vì nó buộc chúng tôi phải sử dụng .NET 4 hoặc phiên bản Visual Studio thực sự cũ ...)
Per Lundberg

8

Đây là một cái nữa:

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

Công cụ này cũng dựa trên công cụ Chrome mới nhất nhưng nó dễ sử dụng hơn nhiều so với CEF. Đó là một dll .NET duy nhất mà bạn có thể chỉ cần tham khảo và sử dụng.


Sự hỗ trợ là tuyệt vời quá.
huseyint

3
Thông tin cơ bản dường như còn thiếu trên trang web đó - phiên bản Chrome bao gồm những gì?
Czarek Tomczak

2
Uh-oh, không miễn phí. KHÔNG MIỄN PHÍ. Những người này đã nghĩ gì? :)
dkellner

Cần phải nói rõ ở đây rằng, trong khi có phiên bản dùng thử, nó không miễn phí.
ewilan

8

Hãy xem thư viện DotNetBrowser được phát triển bởi nhóm tôi thuộc về. Nó cung cấp các điều khiển trình duyệt WPF và WinForms dựa trên Chromium, khá dễ dàng để nhúng vào ứng dụng .NET. Nó hỗ trợ tất cả các tiêu chuẩn web hiện đại bao gồm HTML5, CSS3 và JavaScript. Trang được hiển thị trông giống hệt như trong Google Chrome.

Thư viện kế thừa kiến ​​trúc đa quy trình của Chromium - mỗi trang web được hiển thị trong một quy trình Chromium riêng biệt và ứng dụng sẽ tiếp tục hoạt động ngay cả sau khi sự cố plugin hoặc bất kỳ lỗi không mong muốn nào khác xảy ra trên trang web.

Dưới đây là một số tính năng hữu ích khác, được cung cấp bởi DotNetBrowser: có thể nghe các sự kiện tải, xử lý hoạt động mạng, định cấu hình proxy, mô phỏng hành động của người dùng, làm việc với cookie, truy cập và sửa đổi DOM, nghe các sự kiện DOM, gọi JavaScript từ .NET và ngược lại, sử dụng máy ảnh web và micrô trên trang web, thiết lập giao tiếp dựa trên WebRTC và hơn thế nữa .

Kiểm tra Tài liệu tham khảo API để biết thêm chi tiết.

Đoạn mã dưới đây trình bày cách tạo BrowserView, nhúng nó vào Biểu mẫu và tải 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");
        }
    }
}

Khi bạn chạy ví dụ trên, bạn sẽ nhận được kết quả sau:

nhập mô tả hình ảnh ở đây

Thư viện là thương mại. Giấy phép thương mại bao gồm các gói hỗ trợ cho các kích cỡ nhóm khác nhau. Cũng có thể mua mã nguồn của thư viện.

Bên cạnh trang riêng, thành phần này có sẵn dưới dạng gói NuGetgói VSIX trong Thị trường Visual Studio.


1
có vẻ hợp lệ và tôi đã nhúng phiên bản dùng thử trong ứng dụng của mình. Vấn đề duy nhất là nó là một sản phẩm thương mại và giấy phép không rẻ lắm. Nếu không, có vẻ vững chắc với tôi.
DoronG

Đáng buồn là DotNetBrowser KHÔNG miễn phí! : /
Deniz

4

Tôi đã sử dụng Awesomium.NET. Mặc dù tôi không thích thực tế rằng nó không phải là nguồn mở và thực tế là nó sử dụng một công cụ kết xuất Webkit khá cũ, nhưng nó thực sự dễ sử dụng. Đó là về sự chứng thực duy nhất tôi có thể cung cấp cho nó.


1
Bạn có thể chia sẻ cơ sở người dùng của bạn lớn như thế nào cho dự án đó không?
noseratio

Tôi chưa bao giờ thực sự triển khai dự án, vì vậy cơ sở người dùng bằng không. Tôi chỉ đang thử nghiệm các lựa chọn bản thân mình.
Ming Slogar

2
Tôi đã chịu đựng trong nhiều tháng để hỗ trợ một ứng dụng C # dựa trên Awesomium; nó có thể làm rung chuyển các trò chơi C ++ nhưng trong C #, điều khiển trình duyệt của họ bị lỗi hoàn toàn. Việc triển khai phức tạp (bạn cần trình cài đặt kỳ lạ của họ để thêm nội dung vào GAC), hành vi lỗi (đôi khi nó khởi động với màn hình đen, người dùng phải khởi động lại ứng dụng theo cách thủ công) và tốc độ chậm (các trang web KHÔNG hiển thị khi họ tải , nó sẽ bị treo cho đến khi trang được tải đầy đủ / một nửa và phải mất 5-10 giây để khởi tạo trên một máy
chậm

5
Cuối cùng tôi đã đi với CefSharp và kết quả thật tuyệt vời. <100 ms khởi tạo (tức là init tức thì) và không có "lỗi". Thứ chỉ hoạt động. Như là nó phải như thế. Ngoài ra CefSharp KHÔNG cần phải được thêm vào GAC để không cần thay đổi trình cài đặt. Chỉ cần sao chép các tập tin của bạn và đi. Tôi đã đề cập CEF / CefSharp tốt hơn mọi thư viện C # của Mozilla / WebKit mà tôi đã thử nghiệm chưa? Oh và vì trời không sử dụng IE. Nó hoạt động. Vâng, nó có, nhưng nó hoàn toàn thiếu tính năng và nó hoạt động rất tệ (tốc độ).
TheFlash

1
@RobinRodricks Chính xác là kinh nghiệm của tôi. Tôi gần như từ bỏ cách tiếp cận, nhưng sau đó tôi tìm thấy CefSharp :-) (Và ai quan tâm đến một vài MB nữa, những ngày này, khi các trình điều khiển máy in xuất hiện trên DVD :-)?)
Xan-Kun Clark-Davis


2

Tôi gặp vấn đề tương tự với trình đọc RSS WPF của mình, ban đầu tôi dùng Awesomium (tôi nghĩ phiên bản 1.6) Awesomium rất tuyệt. Bạn nhận được nhiều quyền kiểm soát cho bộ nhớ đệm (hình ảnh và nội dung HTML), thực thi JavaScript, chặn tải xuống và vv. Nó cũng siêu nhanh. Quá trình cách ly có nghĩa là khi trình duyệt gặp sự cố, nó không làm sập ứng dụng.

Nhưng nó cũng nặng, thậm chí bản dựng phát hành thêm khoảng 10-15mb (không thể nhớ chính xác số) và do đó, một hình phạt khởi động nhẹ. Sau đó tôi nhận ra, chỉ có một vấn đề tôi gặp phải với kiểm soát trình duyệt IE là nó sẽ xuất hiện các lỗi JavaScript mọi lúc. Nhưng điều đó đã được sửa với đoạn trích sau.

Tôi hầu như không sử dụng ứng dụng của mình trên XP hoặc Vista nhưng trên Win 7 trở lên thì nó không bao giờ bị sập (ít nhất là không phải vì tôi đã sử dụng điều khiển trình duyệt 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 });
    }
}

Cảm ơn câu trả lời. Vì vậy, cuối cùng bạn đã quay trở lại IE từ Awesomium?
chơi

Có tôi đã làm. và tôi đã rất vui Tôi sử dụng ClickOnce để có thể triển khai rất nhỏ và không bị đóng băng khi khởi động!
Sameer Vartak

Cảm ơn, tôi đã bình chọn câu trả lời của bạn. BTW, có một cách khác để có được IWebBrowser2giao diện bên trong .
chơi

Mát mẻ. điều khiển Activex có hoạt động trong WPF không? Cảm ơn bạn đã bỏ phiếu :-)
Sameer Vartak

Xin lỗi, đã không đọc các liên kết tham khảo một cách cẩn thận. Yup đó là một mẫu XAML và nó hoạt động. Cảm ơn.
Sameer Vartak

1

Microsoft đang phát hành điều khiển WPF " Microsoft Edge WebView2 " sẽ cung cấp cho chúng tôi một tùy chọn miễn phí, tuyệt vời để nhúng Chromium trên Windows 10, Windows 8.1 hoặc Windows 7. Nó có sẵn thông qua gói Nuget Microsoft.Web.WebView2.


Đây là một lựa chọn tuyệt vời, mặc dù là năm 2020 và ngày nay tôi sẽ tìm kiếm một giải pháp đa nền tảng, ví dụ như Chromely .
chơi

1
Tôi nghĩ rằng nó phụ thuộc vào việc bạn đang xem xét thêm một công cụ web nhỏ vào ứng dụng máy tính để bàn hay ứng dụng máy tính để bàn được xây dựng như ứng dụng web. Tôi nghĩ rằng bạn sẽ chỉ sử dụng WebView2 nếu đó là một công cụ web nhỏ cho ứng dụng máy tính để bàn.
scottheckel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.