c# - क्रोम की तरह एक बेहतर ब्राउज़र के साथ.NET WebBrowser नियंत्रण को बदलना?




webbrowser-control (13)

क्या एक आधुनिक ब्राउज़र को .NET अनुप्रयोग में डालने का कोई अपेक्षाकृत आसान तरीका है?

जहां तक ​​मैं समझता हूं, WebBrowser नियंत्रण आईई के लिए एक रैपर है, जो एक समस्या नहीं होगी, सिवाय इसके कि ऐसा लगता है कि यह आईई का एक पुराना संस्करण है, सीएसएस स्क्रू-अप, संभावित सुरक्षा के मामले में जो कुछ भी है जोखिम (यदि प्रतिपादन इंजन को पैच नहीं किया गया था, तो क्या मैं वास्तव में ज़िलियन बफर ओवरफ्लो समस्याओं को ठीक करने की उम्मीद कर सकता हूं?), और अन्य मुद्दों।

मैं विजुअल स्टूडियो सी # (एक्सप्रेस संस्करण का उपयोग कर रहा हूं - क्या इससे कोई फर्क पड़ता है?)

मैं अपने अनुप्रयोगों में एक अच्छा वेब ब्राउज़र एकीकृत करना चाहता हूं। कुछ में, मैं बस उपयोगकर्ता पंजीकरण प्रक्रिया, मेरी कुछ वेबसाइट की विशेषताओं और उस क्रम की अन्य चीजों के साथ इंटरफेस को संभालने के लिए इसका उपयोग करता हूं, लेकिन मेरे पास एक और एप्लीकेशन है जो अधिक गलती की आवश्यकता होगी ... नियंत्रण।

मुझे जरूरत है:

  • एक ब्राउज़र जो मेरे आवेदन की खिड़की के अंदर एकीकृत हो सकता है (एक अलग विंडो नहीं)
  • किसी भी आधुनिक ब्राउज़र के समान, सीएसएस, जेएस और अन्य वेब प्रौद्योगिकियों के लिए एक अच्छा समर्थन
  • "नेविगेट", "बैक", "रीलोड" जैसे मूल ब्राउज़र फ़ंक्शन ...
  • पृष्ठ कोड और आउटपुट के लिए उदार पहुंच।

मैं क्रोम के बारे में सोच रहा था, क्योंकि यह बीएसडी लाइसेंस के तहत आता है, लेकिन मैं आईई के हाल के संस्करण से खुश हूं।

जितना संभव हो, मैं चीजों को सरल रखना चाहता हूं। सबसे अच्छा होगा यदि कोई मौजूदा WebBrowser नियंत्रण को पैच कर सकता है, जो मुझे पहले से लगभग 70% की आवश्यकता है, लेकिन मुझे नहीं लगता कि यह संभव है।

मुझे मोज़िला ( http://www.iol.ie/~locka/mozilla/control.htm ) के लिए एक ActiveX नियंत्रण मिला है, लेकिन ऐसा लगता है कि यह एक पुराना संस्करण है, इसलिए यह आवश्यक रूप से एक सुधार नहीं है।

मैं सुझावों के प्रति उदार हूं


2016 अपडेट करें:

मेरे लिए, आईई के लिए एकमात्र विश्वसनीय, बनाए रखा ब्राउज़र विकल्प ईओ.WebBrowser है। मैंने दिन और सप्ताह बिताए दूसरों की कोशिश की। उनमें से सभी के पास कुछ मुद्दे थे जो किसी बिंदु पर मेरे लिए शो को रोक देते थे।


EO.BrowserControl त्वरित और आसान है। इसमें क्रोम ब्राउजर इंजन है और .NET के किसी भी संस्करण के साथ काम करता है

https://visualstudiogallery.msdn.microsoft.com/fcee0646-42e7-484f-b22e-f8b2ace55dd7

नोट: यह एक व्यावसायिक रूप से लाइसेंस प्राप्त उत्पाद है और मैं इसे ध्यान में रखते हुए इसे बढ़ावा नहीं दे रहा हूं। कई अन्य चीजों को आजमाने के बाद, मैंने इसे चुनने का अंत किया।


आप वेबब्रोसर नियंत्रण के लिए आईई संस्करण सेट करने के लिए रजिस्ट्री का उपयोग कर सकते हैं। यहां जाएं: HKLM \ सॉफ़्टवेयर \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION और ब्राउज़र_मुलेशन के मूल्य के साथ "yourAplicationName.exe" जोड़ें ब्राउज़र_मुलेशन के मान को देखने के लिए, लिंक देखें: http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation


क्रोम वेबकिट का उपयोग करता है यदि आपको पता नहीं था, जिसे सफारी द्वारा भी उपयोग किया जाता है। यहां कुछ प्रश्न हैं जो एक ही नस के हैं:

वेबकिट एक अन्य उत्तर राज्यों के रूप में महान नहीं है, एक संस्करण अब काम नहीं करता है (गूगल कोड एक) और मोनो एक प्रयोगात्मक है। यह अच्छा होगा अगर किसी ने इसके लिए एक सभ्य .NET wrapper बनाने का प्रयास किया लेकिन ऐसा कुछ ऐसा नहीं है जो कोई करना चाहता है - जो आश्चर्यजनक है कि अब इसे HTML5 के लिए समर्थन है और आईई (8) ) इंजन की कमी है।

अपडेट (2014)

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

मुझे लगता है कि यह बैटलफील्ड 3 में उत्पत्ति द्वारा उपयोग किया जाने वाला ब्राउज़र है।

अपडेट (2016)

अब DotnetBrowser , DotnetBrowser के लिए एक वाणिज्यिक विकल्प है। यह क्रोमियम से आधारित है।


मुझे एक ही समस्या थी, वेबब्रोसर आईई के पुराने संस्करण का उपयोग कर रहा था, कुछ गूंजने के साथ मैं निम्नलिखित कोड में आया था जो रजिस्ट्री में बदलाव करता है और वेब ब्राउजर को सबसे नवीनतम आईई संस्करण का उपयोग करने के लिए बनाता है:

 public enum BrowserEmulationVersion
    {
        Default = 0,
        Version7 = 7000,
        Version8 = 8000,
        Version8Standards = 8888,
        Version9 = 9000,
        Version9Standards = 9999,
        Version10 = 10000,
        Version10Standards = 10001,
        Version11 = 11000,
        Version11Edge = 11001
    }
    public static class WBEmulator
    {
        private const string InternetExplorerRootKey = @"Software\Microsoft\Internet Explorer";

        public static int GetInternetExplorerMajorVersion()
        {
            int result;

            result = 0;

            try
            {
                RegistryKey key;

                key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey);

                if (key != null)
                {
                    object value;

                    value = key.GetValue("svcVersion", null) ?? key.GetValue("Version", null);

                    if (value != null)
                    {
                        string version;
                        int separator;

                        version = value.ToString();
                        separator = version.IndexOf('.');
                        if (separator != -1)
                        {
                            int.TryParse(version.Substring(0, separator), out result);
                        }
                    }
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }

            return result;
        }
        private const string BrowserEmulationKey = InternetExplorerRootKey + @"\Main\FeatureControl\FEATURE_BROWSER_EMULATION";

        public static BrowserEmulationVersion GetBrowserEmulationVersion()
        {
            BrowserEmulationVersion result;

            result = BrowserEmulationVersion.Default;

            try
            {
                RegistryKey key;

                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
                if (key != null)
                {
                    string programName;
                    object value;

                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
                    value = key.GetValue(programName, null);

                    if (value != null)
                    {
                        result = (BrowserEmulationVersion)Convert.ToInt32(value);
                    }
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }

            return result;
        }
        public static bool SetBrowserEmulationVersion(BrowserEmulationVersion browserEmulationVersion)
        {
            bool result;

            result = false;

            try
            {
                RegistryKey key;

                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);

                if (key != null)
                {
                    string programName;

                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);

                    if (browserEmulationVersion != BrowserEmulationVersion.Default)
                    {
                        // if it's a valid value, update or create the value
                        key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);
                    }
                    else
                    {
                        // otherwise, remove the existing value
                        key.DeleteValue(programName, false);
                    }

                    result = true;
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }

            return result;
        }

        public static bool SetBrowserEmulationVersion()
        {
            int ieVersion;
            BrowserEmulationVersion emulationCode;

            ieVersion = GetInternetExplorerMajorVersion();

            if (ieVersion >= 11)
            {
                emulationCode = BrowserEmulationVersion.Version11;
            }
            else
            {
                switch (ieVersion)
                {
                    case 10:
                        emulationCode = BrowserEmulationVersion.Version10;
                        break;
                    case 9:
                        emulationCode = BrowserEmulationVersion.Version9;
                        break;
                    case 8:
                        emulationCode = BrowserEmulationVersion.Version8;
                        break;
                    default:
                        emulationCode = BrowserEmulationVersion.Version7;
                        break;
                }
            }

            return SetBrowserEmulationVersion(emulationCode);
        }
        public static bool IsBrowserEmulationSet()
        {
            return GetBrowserEmulationVersion() != BrowserEmulationVersion.Default;
        }
    } 

आपको बस एक वर्ग बनाने और इस कोड को इसमें रखने की आवश्यकता है, फिर प्रोग्राम शुरू होने पर निम्न कोड चलाएं:

 if (!WBEmulator.IsBrowserEmulationSet())
            {
                WBEmulator.SetBrowserEmulationVersion();
            }

मुझे पता है कि यह 'प्रतिस्थापन' वेबब्रोसर नियंत्रण नहीं है, लेकिन लेआउट इत्यादि के लिए बूटस्ट्रैप 3+ का उपयोग कर रहे एक पृष्ठ को दिखाते हुए मुझे कुछ भयानक प्रतिपादन समस्याएं थीं और फिर मुझे एक पोस्ट मिली जिसने सुझाव दिया कि मैं निम्नलिखित का उपयोग करता हूं। स्पष्ट रूप से यह आईई के लिए विशिष्ट है और इसे प्रतिपादन के लिए क्लाइंट मशीन पर मिले नवीनतम बदलाव का उपयोग करने के लिए कहता है (इसलिए यह आईई 7 का उपयोग नहीं करेगा जैसा कि मुझे विश्वास है कि डिफ़ॉल्ट है)

तो बस रखो:

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

कहीं आपके दस्तावेज़ के मुख्य भाग में।

यदि निश्चित रूप से यह आपका दस्तावेज़ नहीं है, तो यह स्पष्ट रूप से मदद नहीं करेगा (हालांकि मैं व्यक्तिगत रूप से इसे सुरक्षा छेद मानता हूं यदि आप वेबब्रोसर नियंत्रण के माध्यम से स्वयं द्वारा बनाए गए पृष्ठों को पढ़ रहे हैं - क्यों न केवल वेबब्रोसर का उपयोग करें!)

सौभाग्य।


मैंने GeckoFX का उपयोग किया है और यह मुझे बहुत अच्छी तरह से सेवा करता है। यह फ़ायरफ़ॉक्स इंजन का उपयोग करता है। एकमात्र चेतावनी जिसे मैंने कभी भी साथ चलाया है, यह है कि दस्तावेज़ वास्तव में पूरी तरह से लोड होने से पहले "दस्तावेज़ लोडेड" ईवेंट उत्सर्जित करता है ... मुझे लगता है कि HTML लोड होने पर यह एक शूट हो जाता है, और फिर दूसरा छवियों और सामान लोड कर रहे हैं। मैंने इसे पहले को अनदेखा करके ठीक कर दिया है, और इसने अब तक असफल होने के बिना खूबसूरती से काम किया है।

आप इसे यहां पा सकते हैं: https://bitbucket.org/geckofx/

सबसे सभ्य पुस्तकालयों की तरह, यह खुला स्रोत है।


मैंने कुछ हद तक वेबकिट वेरिएंट की कोशिश की है, लेकिन मेरे अनुभव में कुछ भी नहीं है जो OpenWebKitSharp है। इसे प्यार करो इसे प्यार करें .. एचटीएमएल 5 और CSS3 स्कोर उतने करीब हैं जितना वे Google क्रोम पर जा सकते हैं। बहुत अच्छा एपीआई और घटना मॉडल। यदि आपको "लागू नहीं किया गया" एपीआई सबसे अधिक संभावना है क्योंकि वे वेबकिट में लागू नहीं किए गए हैं। सब कुछ महान काम करता है।

OpenWebKitSharp WebKit.NET 0.5 प्रोजेक्ट के आधार पर वेबकिट इंजन के लिए एक .NET wrapper है। यह 0.5 संस्करण में अधिक कार्यक्षमता जोड़ता है और यह उस निर्माण से अधिक विधियों को प्रदान करता है। ओपनवेबकिटशर्प काहिरा बिल्ड (0.5) और वेबकिट के रात्रि निर्माण (डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से) दोनों का समर्थन करता है। संस्करण 1.5 में स्थिर और अधिक रात का निर्माण शामिल है और इमारत के बाद स्वचालित रूप से कॉपी किया गया है। पिछले संस्करणों में यह कैरो बिल्ड के साथ होता है। ओपनवेबकिटशर्प वर्तमान में जीटीलाइट नेविगेटर, एक तेज, स्थिर और लचीला वेब ब्राउज़र को सशक्त करता है।


मोज़नेट एक .NET नियंत्रण है, जो पहले कम या ज्यादा छोड़े गए गेकोफैक्स नियंत्रण पर आधारित था, लेकिन पूर्ण विकास में है और इसमें गेकोफैक्स की तुलना में अधिक सुविधाएं हैं। आप इसे Se7en सॉफ्ट वेबसाइट पर पा सकते हैं।


यदि आप एक अच्छा आईई आधारित नियंत्रण की तलाश में हैं - चेक आउट: http://code.google.com/p/csexwb2/

मैंने इसे उत्पादन उत्पादों में इस्तेमाल किया है। यह बहुत अच्छा है और अच्छे डेमो हैं हालांकि ऐसा लगता है कि अब तक इसका उपयोग नहीं किया जा रहा है।


EO.WebBrowser . EO.WebBrowser आज़माएं। यह नया है और क्रोम ब्राउज़र के नवीनतम संस्करण पर आधारित है। इसके बारे में सबसे अच्छा हिस्सा यह है कि यह एक ही .NET dll के अंदर सबकुछ पैक करता है न कि केवल इसका उपयोग करना और तैनाती करना बहुत आसान है, बल्कि उसी डीएलएल 32 बिट और 64 बिट दोनों का समर्थन करता है क्योंकि यह एक .NET dll है।


GeckoFX नियंत्रण देखें।


2016 अपडेट करें:

मैं सुझाव दे सकता हूं कि 3 अतिरिक्त विकल्प हैं:

1. BrowseEmAll.Cef

एक .NET घटक जिसका उपयोग क्रोम इंजन को आपके .NET एप्लिकेशन में एकीकृत करने के लिए किया जा सकता है। CefGlue आधार पर लेकिन नवीनतम क्रोम संस्करण के अपडेट पर थोड़ा तेज़। इसके अलावा एक वाणिज्यिक सहायता विकल्प उपलब्ध है जो कुछ के लिए आसान हो सकता है। बेशक घटक स्वयं खुला स्रोत है

2. BrowseEmAll.Gecko

एक अन्य .NET घटक जिसका उपयोग फ़ायरफ़ॉक्स इंजन को आपके .NET एप्लिकेशन में एकीकृत करने के लिए किया जा सकता है। यह https://bitbucket.org/geckofx/ पर आधारित है लेकिन https://bitbucket.org/geckofx/ के वर्तमान संस्करण के विपरीत यह फ़ायरफ़ॉक्स के सामान्य रिलीज निर्माण के साथ काम करेगा। Geckofx का उपयोग करने के लिए आपको फ़ायरफ़ॉक्स स्वयं बनाना होगा। फिर वाणिज्यिक समर्थन उपलब्ध है लेकिन घटक स्वयं पूरी तरह से खुला स्रोत है

3. BrowseEmAll कोर एपीआई

अपने .NET एप्लिकेशन में सभी अलग-अलग ब्राउज़रों की आवश्यकता है? जो ब्राउज़एमएएल कोर एपीआई आप अपने आवेदन में क्रोम, फ़ायरफ़ॉक्स, वेबकिट और इंटरनेट एक्सप्लोरर को एकीकृत कर सकते हैं। यह एक वाणिज्यिक उत्पाद है हालांकि चेतावनी दी जानी चाहिए।

(पूर्ण प्रकटीकरण: मैं इस कंपनी के लिए काम करता हूं इसलिए नमक के अनाज के साथ जो कुछ भी कहता हूं उसे ले लो)





webbrowser-control