WPF / C # के साथ IE WebBrowser नियंत्रण के बजाय क्रोमियम एम्बेड करने के विकल्प


158

इंटरनेट एक्सप्लोरर-आधारित WPF WebBrowser नियंत्रण कुछ कीबोर्ड से ग्रस्त है और मुद्दों और मेमोरी लीक मुद्दों पर ध्यान केंद्रित करता है । इन समस्याओं के वैकल्पिक समाधान के रूप में, हम HTML संपादन के आधार पर अपने WPF / C # प्रोजेक्ट में WebBrowser नियंत्रण के बजाय क्रोमियम की मेजबानी के लिए उपलब्ध विकल्पों पर विचार कर रहे हैं। इसी तरह के सवाल यहां पहले पूछे गए हैं। मैंने उत्तर पढ़े हैं और अपने स्वयं के शोध किए हैं, लेकिन मैं उन लोगों से कुछ और प्रतिक्रिया प्राप्त करना चाहता हूं , जिन्होंने वास्तव में उत्पादन-गुणवत्ता परियोजनाओं में निम्नलिखित विकल्पों में से किसी का उपयोग किया है :

Awesomium और Awesomium.NET

यह बहुत उपयुक्त लगता है, लेकिन मुझे यह पसंद नहीं है कि परियोजना खुला-स्रोत नहीं है और पूर्ण स्रोत आसानी से उपलब्ध नहीं है। इसके अलावा, यह हमारी परियोजना के लिए एक ओवरकिल हो सकता है, क्योंकि ऑफ-स्क्रीन रेंडरिंग ऐसी चीज नहीं है जिस पर हम वास्तव में निर्भर करते हैं।

CEF के लिए क्रोमियम एंबेडेड फ्रेमवर्क (CEF) और .NET बाइंडिंग

यह संभवतः वर्तमान में उपलब्ध सबसे अच्छा विकल्प है। वर्तमान में Chrome v27 के साथ सिंक होने के कारण यह परियोजना जीवित और सक्रिय प्रतीत होती है। CEF3 क्रोम मल्टी-प्रोसेस आर्किटेक्चर का उपयोग करता है। ऐसा भी लग रहा है कि Adobe इसे कुछ एंडोर्समेंट दे रहा है ।

Google का Chrome फ़्रेम

जबकि इसका मूल उद्देश्य IE और फ़ायरफ़ॉक्स के लिए HTML5 प्लगइन होना था, यह वास्तव में स्टैंडअलोन ActiveX नियंत्रण के रूप में भी काम करता है, इसलिए मैं इसे WPF के साथ उपयोग के लिए लपेट सकता था। यह आंतरिक वेब पेज ( ) के साथ बातचीत के लिए एक पर्याप्त एपीआई को उजागर करता है onmessage, addEventListener/removeEventListener, postMessage। मुझे पता है कि Google Chrome फ़्रेम को बंद करना है , लेकिन मुझे लगता है कि स्रोत क्रोमियम रिपॉजिटरी में बने रहेंगे। जैसा कि हम जाते हैं, नवीनतम क्रोमियम कोड के साथ इसे अपडेट करना मुश्किल नहीं होना चाहिए और इस पर हमारा पूरा नियंत्रण होगा।

WebKit .NET आवरण

बिल्कुल क्रोमियम-आधारित नहीं है और V8 इंजन का उपयोग नहीं करता है, इसलिए यह वास्तव में एक विकल्प नहीं है।

क्या कोई और विकल्प है जिसकी मैंने अनदेखी की होगी?

मैं बहुत सराहना करूँगा अगर किसी ने वास्तविक जीवन, उत्पादन-गुणवत्ता WPF परियोजना के लिए उपरोक्त विकल्पों में से किसी के साथ अपने अनुभव को साझा किया। क्या आपके पास कोई एकीकरण, लाइसेंसिंग या तैनाती निहितार्थ है? धन्यवाद।

[संपादित करें] मैं इस प्रश्न को एक उदार इनाम प्रदान करके एक बढ़ावा देने के लिए आर्टलंग को धन्यवाद देना चाहूंगा ।

जवाबों:


124

आप पहले से ही क्रोमियम (CEF, क्रोम फ़्रेम, एवेज़ोमियम) को एम्बेड करने के लिए सबसे उल्लेखनीय समाधान सूचीबद्ध कर चुके हैं। ऐसी कोई और परियोजना नहीं है जो मायने रखती है।

अभी भी बर्केलियम परियोजना है ( बर्केलियम शार्प और बर्केलियम प्रबंधित देखें ), लेकिन यह क्रोमियम के पुराने संस्करण का उत्सर्जन करता है।

सीईएफ आपकी सबसे अच्छी शर्त है - यह पूरी तरह से खुला स्रोत है और अक्सर अद्यतन किया जाता है। यह एकमात्र विकल्प है जो आपको क्रोमियम के नवीनतम संस्करण को एम्बेड करने की अनुमति देता है। अब जब Per Lundberg सक्रिय रूप से CEF 3 को CefSharp में पोर्ट करने पर काम कर रहा है , तो यह भविष्य के लिए सबसे अच्छा विकल्प है। इसमें Xilium.CefGlue भी है , लेकिन यह CEF के लिए एक निम्न स्तर का एपीआई प्रदान करता है, यह CEF के C API को बांधता है। दूसरी ओर CefSharp CEF के C ++ API से बंधता है।

एडोब सीईएफ का उपयोग करने वाला एकमात्र प्रमुख खिलाड़ी नहीं है, सीईएफ विकिपीडिया पृष्ठ पर सीईएफ का उपयोग करने वाले अन्य उल्लेखनीय अनुप्रयोगों को देखें ।

Chrome फ़्रेम अपडेट करना तब तक व्यर्थ है, जब तक कि प्रोजेक्ट सेवानिवृत्त नहीं हो जाता है


आप यह भी कहना भूल गए कि आधा सामान काम नहीं करेगा .. जैसे कि कुकीज, कैश क्लीयर करना .. परदे के पीछे सेट करना आदि। बस असेसोमियम का उपयोग करें और अपनी मुसीबत को बचाएं।

4
हे, अच्छा जवाब Czarek, क्रेडिट के लिए धन्यवाद। :) (अब तक यह नहीं देखा था)
प्रति लंडबर्ग

4
बेशक, यह इंगित करने के लायक है: किसी भी खुले स्रोत परियोजना में स्पष्ट रूप से "लापता" चीजें हो सकती हैं। न तो Xilium.CefGlue और न ही CefSharp उस नियम के कोई अपवाद हैं। ओपन सोर्स सामान के बारे में अच्छी बात यह है कि आप वास्तव में एक छोटी सी समस्या को देखने के लिए (यथोचित रूप से कम) राशि खर्च कर सकते हैं, और अपने फिक्स को शामिल कर सकते हैं। हम देखते हैं कि समय-समय पर CefSharp के साथ और यह बहुत साफ है।
प्रति लंडबर्ग

1
अगर मैं गलत हूं तो मुझे सुधार लो लेकिन क्या CefSharp को DLL की आवश्यकता नहीं है जो 50MB से अधिक बताई गई हैं? यह एक विशाल स्थापना सेटअप में परिणाम है। Libcef.dll को एक प्रमुख निर्भरता के रूप में सूचीबद्ध किया गया है और यह 38MB
क्राफ्टी

2
@ स्थापना इंस्टॉलेशन सेटअप 7z जैसे एल्गोरिदम का उपयोग करके इसे पैक करने की अनुमति देता है और इसका परिणाम 55 एमबी -> से 17 एमबी तक कम हो जाता है। Google Chrome की तुलना में CefSharp का आकार बहुत अधिक नहीं है, जो 152 MB अनपैक्ड और 40 MB सेटअप पैक है।
Czarek Tomczak

11

कुछ समय पहले भी हमारे सामने यही चुनौती थी। हम CEF3 ओपन सोर्स लाइब्रेरी के साथ जाना चाहते हैं जो WPF- आधारित है और .NET 3.5 का समर्थन करता है।

सबसे पहले, सीईएफ के लेखक ने खुद को यहां विभिन्न भाषाओं के लिए बाध्यकारी सूचीबद्ध किया ।

दूसरे, हम ओपन सोर्स .NET CEF3 बाइंडिंग के साथ आगे बढ़े, जिसे Xilium.CefGlue कहा जाता है और इसके लिए अच्छी सफलता मिली। ऐसे मामलों में जहाँ आप अपेक्षा के अनुरूप काम नहीं कर रहे हैं, लेखक आमतौर पर बिल्ड-इन बिटबकेट ट्रैकर में खोले गए मुद्दों के प्रति बहुत संवेदनशील होता है

अब तक इसने हमें अच्छी सेवा दी है। लेखक नियमित आधार पर नवीनतम CEF3 रिलीज और बग फिक्स का समर्थन करने के लिए अपनी लाइब्रेरी को अपडेट करता है।


2
यह वास्तव में एक बिंदु ("दूसरी तरफ से आ रहा है", इस में CefSharp है) - CefSharp 4.0 केवल कुछ महीनों से है, क्योंकि नए VS टूलसेट के साथ 3.5 का समर्थन करने में समस्याएं हैं। (VS2010 + C ++ / CLI के साथ पुराने फ्रेमवर्क का समर्थन नहीं कर सकता है, जो थोड़ा दुखद है क्योंकि यह हमें .NET 4 या वास्तव में पुराने Visual Studio संस्करण का उपयोग करने के लिए मजबूर करता है ...)
प्रति Lundberg

8

यहाँ एक और एक है:

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

यह भी नवीनतम क्रोम इंजन पर आधारित है, लेकिन सीईएफ की तुलना में इसका उपयोग करना बहुत आसान है। यह एक एकल .NET डीएल है जिसे आप केवल संदर्भ और उपयोग कर सकते हैं।


समर्थन भी शानदार है।
पति

3
बेसिक जानकारी उस वेबसाइट पर गायब लगती है - इसमें क्रोम संस्करण क्या शामिल है?
Czarek Tomczak

2
उह-ओह, मुक्त नहीं। खाली नहीं। ये लोग क्या सोच रहे थे? :)
dkellner

यह यहाँ सामने कहा जाना चाहिए कि, जबकि एक परीक्षण संस्करण है, यह मुफ़्त नहीं है।
ईविलन

8

मैं जिस टीम से संबंधित हूं , DotNetBrowser लाइब्रेरी को देखें। यह क्रोमियम-आधारित WPF और WinForms ब्राउज़र नियंत्रण प्रदान करता है, जो .NET अनुप्रयोग में एम्बेड करना काफी आसान है। यह HTML5, CSS3 और जावास्क्रिप्ट सहित सभी आधुनिक वेब मानकों का समर्थन करता है। प्रस्तुत पृष्ठ बिल्कुल Google Chrome जैसा दिखता है।

लाइब्रेरी को क्रोमियम की मल्टी-प्रोसेस आर्किटेक्चर विरासत में मिलती है - प्रत्येक वेब पेज को एक अलग क्रोमियम प्रक्रिया में प्रस्तुत किया जाता है, और प्लगइन क्रैश या वेब पेज पर किसी अन्य अप्रत्याशित त्रुटि के बाद भी एप्लिकेशन काम करना जारी रखेगा।

DotNetBrowser द्वारा प्रदान की गई कुछ अन्य उपयोगी विशेषताएं यहां दी गई हैं: घटनाओं को लोड करना, नेटवर्क गतिविधि को संभालना, प्रॉक्सी को कॉन्फ़िगर करना, उपयोगकर्ता की क्रियाओं का अनुकरण करना, कुकीज़ के साथ काम करना, डोम को एक्सेस करना और डोम ईवेंट को सुनना, .NET से जावास्क्रिप्ट को कॉल करना संभव है। और इसके विपरीत, वेब पेज पर वेब कैमरा और माइक्रोफोन का उपयोग करें, WebRTC- आधारित संचार सेट अप करें, और अधिक

की जाँच करें API संदर्भ अधिक जानकारी के लिए।

नीचे दिया गया कोड स्निपेट प्रदर्शित करता है कि ब्राउज़र व्यू कैसे बनाएं, इसे फ़ॉर्म में एम्बेड करें और 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");
        }
    }
}

एक बार जब आप ऊपर दिए गए उदाहरण को चलाते हैं तो आपको निम्न आउटपुट मिलेंगे:

यहां छवि विवरण दर्ज करें

पुस्तकालय व्यावसायिक है। वाणिज्यिक लाइसेंस में विभिन्न टीम आकारों के लिए समर्थन पैकेज शामिल हैं। पुस्तकालय के स्रोत कोड को खरीदना भी संभव है।

अपने स्वयं के पृष्ठ के अलावा घटक NuGet पैकेज और विज़िक्स स्टूडियो मार्केटप्लेस में VSIX पैकेज के रूप में उपलब्ध है ।


1
मान्य दिखता है और मैंने अपने ऐप में परीक्षण संस्करण एम्बेड किया है। केवल मुद्दा यह है कि यह एक वाणिज्यिक उत्पाद है और लाइसेंस बहुत सस्ता नहीं है। अन्यथा, मुझे ठोस लगता है।
डोरोंग

अफसोस की बात है DotNetBrowser मुफ्त में नहीं है! : /
डेनिज़

4

मैंने Awesomium.NET का उपयोग किया है। हालांकि मुझे यह तथ्य पसंद नहीं है कि यह ओपन-सोर्स नहीं है, और यह भी तथ्य है कि यह एक बहुत पुराना वेबकिट रेंडरिंग इंजन का उपयोग करता है, यह वास्तव में उपयोग करना आसान है। यह केवल समर्थन के बारे में है जो मैं इसे दे सकता हूं।


1
क्या आप साझा कर सकते हैं कि आपका उपयोगकर्ता आधार कितना बड़ा था?
noseratio

मैंने वास्तव में परियोजना को कभी भी तैनात नहीं किया था, इसलिए उपयोगकर्ता आधार शून्य था। मैं केवल विकल्पों के साथ प्रयोग कर रहा था।
मिंग स्लोगर

2
मैं एक Awesomium- आधारित C ​​# ऐप का समर्थन करने वाले महीनों के लिए पीड़ित था; यह C ++ गेम्स के लिए रॉक कर सकता है लेकिन C # में उनका ब्राउजर कंट्रोल एकदम छोटा है। जटिल तैनाती (आपको जीएसी में सामान जोड़ने के लिए उनके अजीब इंस्टॉलर की आवश्यकता है), छोटी गाड़ी का व्यवहार (कभी-कभी यह एक काली स्क्रीन के साथ शुरू होता है, उपयोगकर्ता को मैन्युअल रूप से ऐप को पुनरारंभ करना होगा), और इसकी धीमी गति (वेब ​​पेज प्रदर्शित नहीं होते हैं क्योंकि वे लोड नहीं करते हैं , यह थोड़े लटका हुआ है जब तक कि पृष्ठ पूरी तरह से / आधा भरा हुआ नहीं है, और यह एक धीमी मशीन पर आरंभ करने के लिए 5-10 सेकंड लेता है)
TheFlash

5
मैं आखिरकार CefSharp के साथ गया और परिणाम आश्चर्यजनक थे। <100 एमएस आरंभीकरण (यानी। त्वरित init) और कोई "बग"। सामान काम करता है। जैसा होना चाहिए। इसके अलावा CefSharp को GAC में जोड़ने की आवश्यकता नहीं होती है, इसलिए किसी इंस्टॉलर के बदलाव की आवश्यकता नहीं होती है। बस अपनी फ़ाइलों को कॉपी करें और जाएं। क्या मैंने CEF / CefSharp का उल्लेख किया है जो हर मोज़िला / वेबकिट C # लाइब्रेरी से बेहतर है जिसका मैंने परीक्षण किया है? ओह और आकाश के लिए IE का उपयोग न करें। यह काम करता हैं। हाँ, यह करता है, लेकिन यह पूरी तरह से अभाव की विशेषता है और यह बहुत खराब (गति) करता है।
TheFlash

1
@RobinRodricks वास्तव में मेरा अनुभव भी। मैंने लगभग अप्रोच छोड़ दिया, लेकिन फिर मुझे CefSharp :-) मिला (और जो MB के एक जोड़े की ज्यादा परवाह करता है, इन दिनों, जब प्रिंटर ड्राइवर डीवीडी पर आते हैं :-)?)
Xan-Kun Clark-Davis

4

अद्यतन २०१ M मई:

वैकल्पिक रूप से, आप एज ब्राउज़र को एम्बेड कर सकते हैं, लेकिन केवल विंडोज़ 10 को लक्षित कर सकते हैं।

यहाँ समाधान है।


2

मैं अपने WPF RSS रीडर के साथ एक ही मुद्दा था, मैं मूल रूप से Awesomium के साथ गया था (मुझे लगता है कि संस्करण 1.6) Awesomium महान है। आपको कैशिंग (चित्र और HTML सामग्री), जावास्क्रिप्ट निष्पादन, इंटरसेप्टिंग डाउनलोड और इसके आगे के लिए बहुत नियंत्रण मिलता है। यह सुपर फास्ट भी है। प्रक्रिया अलगाव का मतलब है कि जब ब्राउज़र क्रैश हो जाता है तो यह ऐप क्रैश नहीं करता है।

लेकिन यह भी भारी है, यहां तक ​​कि रिलीज बिल्ड भी 10-15mb (सटीक संख्या याद नहीं कर सकता है) जोड़ता है और इसलिए मामूली स्टार्ट-अप जुर्माना। मुझे तब एहसास हुआ, केवल IE ब्राउज़र नियंत्रण में मुझे समस्या थी कि यह जावास्क्रिप्ट त्रुटियों को हर बार और फिर से फेंक देगा। लेकिन यह निम्नलिखित स्निपेट के साथ तय किया गया था।

मैंने शायद ही एक्सपी या विस्टा पर अपने ऐप का इस्तेमाल किया था, लेकिन विन 7 और उसके बाद यह कभी क्रैश नहीं हुआ (कम से कम इसलिए नहीं क्योंकि मैंने 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 });
    }
}

जवाब के लिए धन्यवाद। तो क्या आप अंततः एईसोमियम से IE में वापस आ गए?
noseratio

हाँ, मैंने किया। और मैं खुश हूं। मैं ClickOnce का उपयोग करता हूं, इसलिए तैनाती बहुत कम थी और कोई स्टार्ट-अप फ्रीज नहीं था!
समीर वर्तक

धन्यवाद, मैंने आपका उत्तर दिया है। BTW, आंतरिक इंटरफ़ेस प्राप्त करने का एक और तरीका है IWebBrowser2
noseratio

ठंडा। WPF में Activex नियंत्रण कार्य करता है? अप-वोटिंग के लिए धन्यवाद :-)
समीर वर्तक

क्षमा करें, संदर्भ लिंक को ध्यान से नहीं पढ़ा। हाँ, यह एक XAML नमूना है और यह काम करता है। धन्यवाद।
समीर वर्तक

1

Microsoft " Microsoft Edge WebView2 " WPF नियंत्रण जारी कर रहा है जो हमें विंडोज 10, विंडोज 8.1 या विंडोज 7 पर क्रोमियम को एम्बेड करने के लिए एक बढ़िया, मुफ्त विकल्प मिलेगा। यह पैकेज के रूप में नुगेट के माध्यम से उपलब्ध है Microsoft.Web.WebView2


यह एक बढ़िया विकल्प है, हालांकि यह 2020 है और इन दिनों मैं एक क्रॉस-प्लेटफ़ॉर्म समाधान की तलाश कर रहा हूं, जैसे कि क्रोमली
noseratio

1
मुझे लगता है कि यह निर्भर करता है कि क्या आप डेस्कटॉप ऐप या वेब ऐप की तरह बनाया गया डेस्कटॉप ऐप में थोड़ा सा वेब सामान जोड़ना चाहते हैं। मुझे लगता है कि आप केवल WebView2 का उपयोग तभी करेंगे जब यह डेस्कटॉप ऐप में थोड़ा वेब सामान हो।
स्काउटचेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.