दिलचस्प पोस्ट
रेल – एक नियंत्रक के अंदर एक सहायक का उपयोग कैसे करें एक सामान्य शब्दकोश के मूल्य की कुंजी हो रही है? वस्तु को डीबीब्लूलल से अन्य प्रकार से नहीं डाला जा सकता "इस" मॉड्यूल का स्रोत कोड क्या कर रहा है? एक दृश्य को केवल तभी निकालना जब कीबोर्ड इनपुट फ़ील्ड को कवर करता है विंडोज जीआईटी "चेतावनी: एलएफ को सीआरएलएफ द्वारा प्रतिस्थापित किया जाएगा", क्या यह चेतावनी पूंछ है? Android में listview के साथ contextmenu का उपयोग करना XAML से एक पैरामीट्रैज्ड कन्स्ट्रक्टर कॉलिंग एंड्रॉइड डिस्पैचर अपवाद पर अनुबंधफ़िल्टर बेमेल डापर में बहुआयामी का सही इस्तेमाल क्या यह मेरे कोड में रेल विकास पर्यावरण के लिए ईएनवी चर सेट करना संभव है? रूबी में विधि नामों के लिए प्रतिबंध क्या हैं? अजगर का उपयोग करके डायनामिक रूप से जेनरेट किए गए वेब पेज पढ़ना डॉकर डॉकर डेमन से कनेक्ट नहीं हो सकता कक्षा com.google.ads.AdView को बढ़ाने में त्रुटि

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

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

Awesomium और Awesomium.NET

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

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

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

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

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

वेबकिट। एनटी आवरण

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

क्या मुझे कोई अन्य विकल्प अनदेखी हो सकता है?

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

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

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

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

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

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

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

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

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

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

दूसरे, हम ओपन सोर्स। एनईटी सीईएफ 3 बाइंडिंग के साथ आगे बढ़ रहे हैं, जिसे ज़ीलियम। सीईजीएलई कहा जाता है और इसके साथ अच्छी सफलता मिली। उन मामलों में जहां कुछ अपेक्षा के अनुरूप काम नहीं कर रहा है, लेखक आमतौर पर बिल्ड-इन बिटबकेट ट्रेकर में खोले गए मुद्दों के प्रति बहुत उत्तरदायी हैं

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

यहाँ एक और है:

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

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

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

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

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

अधिक विवरण के लिए एपीआई संदर्भ देखें।

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

 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 पैकेज के रूप में उपलब्ध है।

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

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

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

मैंने अपने ऐप को एक्सपी या विस्टा पर मुश्किल से इस्तेमाल किया लेकिन 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 }); } }