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




google-chrome webbrowser-control (5)

अद्यतन 2018 मई:

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

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

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

Awesomium और Awesomium.NET

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

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

यह शायद वर्तमान में उपलब्ध सबसे अच्छा विकल्प है। प्रोजेक्ट जीवित और सक्रिय प्रतीत होता है, वर्तमान में क्रोम v27 के साथ सिंक में है। सीईएफ 3 क्रोम मल्टी-प्रोसेस आर्किटेक्चर का उपयोग करता है। ऐसा लगता है कि एडोब इसे कुछ समर्थन दे रहा है।

Google का क्रोम फ्रेम

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

वेबकिट .NET wrapper

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

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

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

[संपादित] मैं उदार उपहार प्रदान करके इस सवाल को बढ़ावा देने के लिए artlung भी शुक्रिया अदा करना चाहता हूं।


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

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

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

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

परियोजना को discontinue बाद क्रोम फ्रेम अपडेट करना व्यर्थ है।


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

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

मैंने शायद ही कभी अपने ऐप को एक्सपी या विस्टा पर इस्तेमाल किया लेकिन विन 7 पर और इससे ऊपर कभी दुर्घटनाग्रस्त नहीं हुआ (कम से कम नहीं क्योंकि मैंने आईई ब्राउज़र नियंत्रण का उपयोग किया था)

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

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

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

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

अधिक जानकारी के लिए एपीआई संदर्भ देखें।

नीचे दिए गए कोड स्निपेट से पता चलता है कि ब्राउज़र व्यू कैसे बनाएं, इसे किसी फ़ॉर्म में एम्बेड करें, और एक यूआरएल लोड करें:

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 पैकेज के रूप में और विजुअल स्टूडियो मार्केटप्लेस में वीएसआईएक्स पैकेज के रूप में उपलब्ध है।


यहां एक और है:

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

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





chromium-embedded