.NET WebBrowser denetimini Chrome gibi daha iyi bir tarayıcı ile mi değiştiriyorsunuz?


432

Bir .NET uygulamasına modern bir tarayıcı eklemenin nispeten kolay bir yolu var mı?

Bildiğim kadarıyla anladığım kadarıyla, WebBrowserkontrol için bir sarıcı IE bunun çok eski bir versiyonu gibi görünüyor dışında bir sorun olmaz, IE bütün bunlarla CSS vida-up, potansiyel güvenlik riskleri açısından gerektirir bir (oluşturma motoru yamalı değilse, gerçekten milyon arabellek taşması sorunlarının düzeltilmesini bekleyebilir miyim?) ve diğer sorunları.

Ben kullanıyorum Visual Studio C # (ekspres baskı - burada herhangi bir fark yapar?)

Uygulamalarıma iyi bir web tarayıcısı entegre etmek istiyorum. Bazılarında, sadece kullanıcı kayıt sürecini, web sitemin bazı özellikleriyle ve bu siparişin diğer şeyleriyle arayüz işlemek için kullanıyorum, ancak daha fazla hata ... kontrolü gerektiren başka bir uygulamam var.

İhtiyacım var:

  • Uygulamamın penceresine entegre olabilecek bir tarayıcı (ayrı bir pencere değil)
  • Herhangi bir modern tarayıcı ile eşit olarak CSS, js ve diğer web teknolojileri için iyi bir destek
  • "Gezinme", "geri", "yeniden yükle" gibi temel tarayıcı işlevleri ...
  • Sayfa koduna ve çıktısına liberal erişim.

BSD lisansı kapsamında olduğu için Chrome'u düşünüyordum, ancak IE'nin son bir sürümünden memnun olurdum.

Mümkün olduğunca işleri basit tutmak istiyorum. En iyisi, WebBrowserihtiyacım olanın yaklaşık% 70'ini yapan mevcut kontrolü yamalayabilirse, ancak bunun mümkün olduğunu düşünmüyorum.

Mozilla için bir activeX kontrolü buldum ( http://www.iol.ie/~locka/mozilla/control.htm ) ama eski bir versiyona benziyor, bu yüzden bir gelişme değil.

Önerilere açığım


19
Neden WebBrowser denetiminin eski bir IE sürümü kullandığını söylüyorsunuz? Her ne kadar IE8 WebBrowser varsayılan olarak IE7 işleme olarak görünse de, kullanıcının sisteminde yüklü olan sürümü kullanır: blogs.msdn.com/ie/archive/2009/03/10/…
Tim Robinson

17
Çünkü makinemde öyle görünmüyor. IE8 yüklü ama kontrol IE 5 beri görmedim ekran sorunları gösterir. Çok basit bir giriş formu, CSS bir dokunuş ile 2 alan bozuk bir ekran var ve bazı javascript ekran çalışmıyor, ancak görüntüler IE8, Firefox, Chrome, Opera'da iyi ... bu yüzden render motorunun eski olduğunu varsaydım. Bu konuda tamamen yanlış olabilirim ve belki de sorun aslında düşündüğümden farklıdır.
Sylverdrag

3
@Sylverdrag: Yanılıyorsunuz. Sisteminizde en son IE kullanır. Ancak, bir yerde WebBrowser denetiminin bağımsız tarayıcıdan daha güçlü bir geriye dönük uyumluluk sorunu olduğunu okudum. IE8'de IE7 modunu açmak için tıklanacak bir simge olabilir. Programınızın bir parçası olarak bu mümkün değildir, bu nedenle kontrol uyumluluk için varsayılan olarak önceki moda geçer. OTOH, "IE8 modunu" kullanacak şekilde nasıl ayarlayacağımı bilmiyorum.
John Saunders

55
Aslında John zımparalar, yanılıyorsun. IE4 kullanır ve bir kayıt defteri değerini, geçerli olduğunu belirtmek için değiştirmeniz gerekir. "Özellik modu öykünmesi" bakın ve son cevapları, yerel anahtar kelimeyi dahil etmek için kullanılan ur cevapları alırsınız, ancak değiştirdiler, google "webbrowser kontrolü" ile bahsettiğim anahtar kelimeler ve u msdn makale bulacaksınız.
Erx_VB.NExT.Coder

8
Varsayılan olarak, WebBrowseraksi belirtilmedikçe barındırılan bir denetim IE7 öykünmesini kullanır FEATURE_BROWSER_EMULATION. Bu, burada belgelenmiştir: blogs.msdn.com/b/askie/archive/2009/03/23/…
noseratio

Yanıtlar:


171

Ödeme CefSharp .Net bağlamaları, ben minnetle toplum tarafından yakalandı ve harika bir şey yönlendirdi Bir süre geri başlayan bir proje.

Proje Chromium Embedded Framework'ü sarar ve Rdio'nun Windows istemcisi, Windows için Facebook Messenger ve Windows için Github gibi bir dizi önemli projede kullanılmıştır.

WPF ve Winforms için tarayıcı kontrollerine sahiptir ve tonlarca özellik ve uzatma noktasına sahiptir. Chromium'a dayanan bu da şaşırtıcı derecede hızlı.

NuGet'ten al: Install-Package CefSharp.WpfveyaInstall-Package CefSharp.WinForms

Örneklere göz atın ve düşüncelerinizi / geri bildirimlerinizi / isteklerinizi iletin: https://github.com/cefsharp/CefSharp

BSD Lisanslı


2
OWS'den CEfSharp'a geçtim ve iddialı bir şekilde çok kaliteli ve aktif bir topluluk olduğunu söyleyebilirim. Sevdim. github.com/cefsharp/CefSharp
Vin

1
CefSharp harika ama kütüphanelerin faily büyük (en son baktım 20 + mb) bu ​​yüzden daha hafif bir proje için doğru olmayabilir unutmayın.
Skyl3lazer

1
@ANguyen yes you can
chillitom

1
Bu projeyi başlatanın siz olduğunu bilmek çok mutlu! Son zamanlarda cefsharp kullandım, ancak kütüphane boyutunun 80+ MB olduğunu görebiliyordum ki bu çok büyük, ancak uygulamanın düzgün çalışması (özellikle düzgün renderleme) için gerekli. Bunu azaltmanın bir yolu var mı?
Aditya Bokade

5
Bu projemi bozdu. Tüm formlar winforms nuget paketini kurduktan sonra bozuldu.
toddmo

84

Chrome, bilmiyorsanız, Safari tarafından da kullanılan (bir çatal) Webkit kullanır. İşte aynı damardan birkaç soru:

Webkit biri diğer yanıt durumları gibi harika değil, bir sürüm artık çalışmıyor (google kodu bir) ve Mono bir deneysel. Birisi bunun için iyi bir .NET sarıcı yapmak için çaba sarf ederse güzel olurdu, ancak herkesin yapmak istediği bir şey değil - bu şu anda HTML5 ve IE'nin diğer birçok özelliği için destek verdiği göz önüne alındığında şaşırtıcıdır (8 ) motor yok.

Güncelleme (2014)

Chrome'u Awesomium adlı .NET uygulamalarınıza gömmenizi sağlayan yeni çift lisanslı bir proje var . Bir .NET api ile birlikte gelir, ancak oluşturma için birkaç hack gerektirir (örnekler tarayıcı penceresini bir tampona çizer, arabelleği bir resim olarak boyar ve bir zamanlayıcıda yeniler).

Ben düşünüyorum bu Battlefield 3'te Menşe kullandığı tarayıcı.

Güncelleme (2016)

Şimdi Awesomium'a ticari bir alternatif olan DotnetBrowser var. Chromium'a dayanıyor.


Teşekkürler. Gecko sarıcısına bir göz atacağım. Bir şey olsa da, orijinal cevap "Tek yapmanız gereken Mozilla ActiveX kontrolünü kaydetmek" diyor ve Express sürümlerinin ek kontroller kaydedemediğini düşündüm. Açık bir şey mi kaçırıyorum?
Sylverdrag

4
@Syl express sürümleri, istediğiniz kadar kontrol kaydedebilir. Yapmayacakları şey, Visual Studio'ya eklentiler yüklemenize izin vermektir.
Joel Coehoorn

1
C # ile WebKit kullanma konusunda oldukça kötü deneyimler yaşadım ve sonunda .NET ile gelen varsayılan web tarayıcı bileşenine yerleşmek zorunda kaldım
Sumit Ghosh

1
Bu tarihten itibaren, yukarıdaki projeler uygulanabilir yer değiştirmeler değildir. Derleyici hataları + istikrarsızlık gösterir. Awesomium, tam ve tamamen çöp.
Kraang Prime

"Bence bu, Origin tarafından Battlefield 3'te kullanılan tarayıcı." Bu yanlış. Bunu biliyorum çünkü ben bu uygulamayı yani windows on kullanmak için zorlamak zorunda kaldı çünkü kenara varsayılan olarak işe yaramadı. Bu bir süre önceydi, muhtemelen çözüldü.
Theyouthis

64

Birkaç gündür C # Web tarayıcı bileşenine alternatifleri test ediyorum ve işte benim listem:

1. Daha yeni IE sürümleri 8,9 kullanarak:

Web Tarayıcı bileşeni IE7 değil IE7 mi? Bunu nasıl değiştirebilirim?

Artıları:

  • Çalıştırmak için fazla çalışma gerekmez
  • IE9 ise bazı HTML5 / CSS3 desteği, IE10 ise dolu

Eksileri:

  • Hedef makinede hedef IE sürümü kurulu olmalı, IE10 hala Win7'de önizlemede

Bu, fazla çalışma gerektirmez ve IE9'un en iyi CSS3 ve HTML5 özelliklerinden yoksun olmasına rağmen bazı HTML5 ve CSS3 desteği alabilirsiniz. Ama eminim IE10 aynı şekilde çalışır. Sorun, hedef sistemin IE10 yüklü olması gerekecekti ve hala Windows 7'de önizlemede olduğu için buna karşı öneriyorum.

2. OpenWebKitSharp

OpenWebKitSharp, WebKit.NET 0.5 projesine dayanan webkit motoru için bir .net sarmalayıcısıdır. WebKit, Chrome / Safari tarafından kullanılan bir düzen motorudur

Artıları:

  • Aktif olarak geliştirildi
  • HTML5 / CSS3 desteği

Eksileri:

  • Birçok özellik uygulanmadı
  • X64'ü desteklemiyor (Uygulama x86 için oluşturulmalıdır)

Birçok özellik henüz uygulanmamış olmasına rağmen OpenWebKit oldukça güzel, burada null nesne referansı atan görsel stüdyo ile birkaç sorun yaşadım ve sonra tasarım modunda, bazı js sorunları var. Bunu kullanan herkes hemen hemen js uyarısının hiçbir şey yapmadığını fark edecektir. Mouseup, mousedown ... vb.Gibi olaylar çalışmıyor, js sürükle ve bırak arabası vb.

Ayrıca, yüklenen VC'nin yeniden dağıtılabilir özel sürümünü gerektirdiği için yüklerken bazı zorluklar yaşadım, bu nedenle istisnadan sonra olay günlüğüne baktım, VC sürümünü buldum ve yükledim.

3. GeckoFX

Artıları:

  • Mono üzerinde çalışır
  • Aktif olarak geliştirildi
  • HTML5 / CSS3 desteği

Eksileri:

  • D̶o̶e̶s̶n̶'̶t̶ ̶s̶u̶p̶p̶o̶r̶t̶ ̶x̶6̶4̶ ̶ (̶A̶p̶p̶ ̶m̶u̶s̶t̶ ̶b̶e̶ ̶b̶u̶i̶l̶t̶ ̶f̶o̶r̶ ̶x̶8̶6 comments yorumlar - aşağıya bakın)

GeckoFX, WinForms Uygulamalarına katıştırmak için bir çapraz platform Webrowser kontrolüdür. Bu, Windows'ta .NET ve Linux'ta mono ile kullanılabilir. Gecko, Firefox tarafından kullanılan bir düzen motorudur.

GeckoFX'in aktif olarak geliştirilmediğine dair birkaç bilgiye çarptım, bu doğru değil, elbette her zaman Firefox'un bir veya iki versiyonu geride kaldı, ancak bu normal, faaliyetten ve kontrolün kendisinden gerçekten etkilendim. İhtiyacım olan her şeyi yapıyor, ancak çalışmasını sağlamak için biraz zamana ihtiyacım vardı, çalışmasını sağlamak için küçük bir öğretici:

  1. GeckoFx-Windows-16.0-0.2'yi indirin , burada daha yeni olup olmadığını kontrol edebilirsiniz GeckoFX
  2. İndirilen iki dll'ye referans ekleyin
  3. GeckoFX sarıcı olduğundan XulRunner'a ihtiyacınız var, hangisine ihtiyacınız olduğunu görmek için Sürüm Listesine gidin
  4. Şimdi hangi XulRunner sürümüne ihtiyacımız olduğunu bildiğimize göre, Mozilla XulRunner sürümlerine gidiyoruz, sürüm klasörüne gidiyoruz -> çalışma zamanları -> xulrunner- (your_version) .en-US.win32.zip, bizim durumumuzda xulrunner-16.0.en- US.win32.zip
  5. Her şeyi açın ve tüm dosyaları bin \ Debug klasörünüze kopyalayın (veya projeniz yayınlanacak şekilde ayarlanmışsa bırakın)
  6. Formunuzun visual studio tasarımcısına gidin, araç kutusuna gidin, içine sağ tıklayın -> Öğeleri seçin -> Gözat -> İndirilen GeckoFX winforms dll dosyasını bulun -> Tamam
  7. Şimdi yeni kontrolünüz olmalı GeckoWebBrowser

Gerçekten Chrome kullanmanız gerekiyorsa, Awesomium adlı bu ürüne bir göz atın , ticari olmayan projeler için ücretsizdir, ancak lisans ticari için birkaç bin dolardır.


4
GeckoFx'i nasıl çalıştıracağınıza dair çok iyi bir açıklama. +1
Alex Essilfie

Geckofx-Winforms oluştururken 4 gtk # kütüphaneye (atk-sharp, gdk-sharp, glib-sharp ve gtk-sharp) ihtiyacım vardı, bu yüzden önce Mono'yu yüklemem gerekiyordu.
bernhardrusch

Bu cevap muhteşem.
Mike Cole

Gerçekten harika bir analiz. Awesomium'u C # uygulamaları ile test edip etmediğinizi bilmek istedim . Bununla ilgili bir sözün var mı? Henüz test etmedim, ancak sayfalarında bahsettikleri mütevelli heyetine baktıktan sonra benim için güvenilir görünüyor.
Abdul Rehman

2
@Wayne doğru yapmak istiyorsanız, projenizde bir klasör veya tüm dosyaları, gecko fx dll'leri ve xul runner dosyalarını dahil edeceğiniz özel bir proje oluşturmalı ve her zaman kopyalamak için ayarlamanız gerekir. build / debug klasörünüze kopyalanır veya VS'den yayınlarsanız yayınlanır, ayrıca aramanız gereken Xpcom.Initialize yöntemi vardır ve bunu xul runner dosyaları yolundan geçirebilirsiniz, yardımcı olur
formatc 16

41

Aynı sorun vardı, WebBrowser IE eski bir sürümünü kullanıyordu, bazı googling Ben kayıt defterinde bir değişiklik yapar ve WebBrowser mümkün olan en son IE sürümünü kullanmak için aşağıdaki kodu rastladı:

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

Sadece bir sınıf oluşturmanız ve bu kodu içine koymanız ve ardından program başladığında aşağıdaki kodu çalıştırmanız gerekir:

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

VB.NET:

Imports Microsoft.Win32
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Security
Imports System.Text
Imports System.Threading.Tasks

Public Enum BrowserEmulationVersion
    [Default] = 0
    Version7 = 7000
    Version8 = 8000
    Version8Standards = 8888
    Version9 = 9000
    Version9Standards = 9999
    Version10 = 10000
    Version10Standards = 10001
    Version11 = 11000
    Version11Edge = 11001
End Enum


Public Class WBEmulator
    Private Const InternetExplorerRootKey As String = "Software\Microsoft\Internet Explorer"
    Public Shared Function GetInternetExplorerMajorVersion() As Integer

        Dim result As Integer

        result = 0

        Try
            Dim key As RegistryKey
            key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey)
            If key IsNot Nothing Then
                Dim value As Object = If(key.GetValue("svcVersion", Nothing), key.GetValue("Version", Nothing))

                Dim Version As String
                Dim separator As Integer
                Version = value.ToString()
                separator = Version.IndexOf(".")
                If separator <> -1 Then
                    Integer.TryParse(Version.Substring(0, separator), result)
                End If
            End If

        Catch ex As SecurityException
            'The user does Not have the permissions required to read from the registry key.
        Catch ex As UnauthorizedAccessException
            'The user does Not have the necessary registry rights.
        Catch

        End Try
        GetInternetExplorerMajorVersion = result
    End Function
    Private Const BrowserEmulationKey = InternetExplorerRootKey + "\Main\FeatureControl\FEATURE_BROWSER_EMULATION"

    Public Shared Function GetBrowserEmulationVersion() As BrowserEmulationVersion

        Dim result As BrowserEmulationVersion
        result = BrowserEmulationVersion.Default

        Try
            Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True)
            If key IsNot Nothing Then
                Dim programName As String
                Dim value As Object
                programName = Path.GetFileName(Environment.GetCommandLineArgs()(0))
                value = key.GetValue(programName, Nothing)
                If value IsNot Nothing Then
                    result = CType(Convert.ToInt32(value), BrowserEmulationVersion)
                End If
            End If
        Catch ex As SecurityException
            'The user does Not have the permissions required to read from the registry key.
        Catch ex As UnauthorizedAccessException
            'The user does Not have the necessary registry rights.
        Catch

        End Try

        GetBrowserEmulationVersion = result
    End Function
    Public Shared Function SetBrowserEmulationVersion(BEVersion As BrowserEmulationVersion) As Boolean

        Dim result As Boolean = False

        Try
            Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True)
            If key IsNot Nothing Then
                Dim programName As String = Path.GetFileName(Environment.GetCommandLineArgs()(0))
                If BEVersion <> BrowserEmulationVersion.Default Then
                    'if it's a valid value, update or create the value
                    key.SetValue(programName, CType(BEVersion, Integer), RegistryValueKind.DWord)
                Else
                    'otherwise, remove the existing value
                    key.DeleteValue(programName, False)
                End If
                result = True
            End If
        Catch ex As SecurityException

            ' The user does Not have the permissions required to read from the registry key.

        Catch ex As UnauthorizedAccessException

            ' The user does Not have the necessary registry rights.

        End Try

        SetBrowserEmulationVersion = result
    End Function


    Public Shared Function SetBrowserEmulationVersion() As Boolean
        Dim ieVersion As Integer
        Dim emulationCode As BrowserEmulationVersion
        ieVersion = GetInternetExplorerMajorVersion()

        If ieVersion >= 11 Then

            emulationCode = BrowserEmulationVersion.Version11
        Else

            Select Case ieVersion
                Case 10
                    emulationCode = BrowserEmulationVersion.Version10
                Case 9
                    emulationCode = BrowserEmulationVersion.Version9
                Case 8
                    emulationCode = BrowserEmulationVersion.Version8
                Case Else
                    emulationCode = BrowserEmulationVersion.Version7
            End Select
        End If

        SetBrowserEmulationVersion = SetBrowserEmulationVersion(emulationCode)
    End Function

    Public Shared Function IsBrowserEmulationSet() As Boolean
        IsBrowserEmulationSet = GetBrowserEmulationVersion() <> BrowserEmulationVersion.Default
    End Function
End Class

Şöyle kullanabilirsiniz:

If Not WBEmulator.IsBrowserEmulationSet() Then
    WBEmulator.SetBrowserEmulationVersion()
End If

1
Mükemmel!! Çok teşekkür ederim!
Ben

1
Python'a çevrildi (bir IronPython uygulaması üzerinde çalışıyor) ve mükemmel çalıştı. Teşekkürler!
David

1
Bu hayatımı kurtarıyor! Teşekkürler
Neeraj Dubey

1
Bu harika ama öykünme sürümünü sıfırlamak mümkün mü? Sürüm WinForms uygulamasında yalnızca bir kez ayarlanabiliyor gibi görünüyor. Sıfırlanmış gibi görünmek mümkün olsa da, etki bir kez ayarlandığında ve kayıt defterinde sıfırlandığında bir WinForms uygulamasında yeni kayıt defteri değerleriyle yeniden okunmamasıdır.
cymorg

1
@DarrenMB IE11 kullandığını bildiğim kadarıyla
Ashkan Mobayen Khiabani

27

Webbrowser denetimi için IE sürümünü ayarlamak için kayıt defterini kullanabilirsiniz. HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION adresine gidin ve browser_emulation değeri ile "uygulamaAdınız.exe" yi ekleyin tarayıcı_emülasyonunun değerini görmek için bağlantıya bakın: http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation


10
Ve görsel stüdyoda hata ayıklama yapıyorsanız, muhtemelen "yourApplicationName.vshost.exe" yi kullanmanız gerekecektir
newenglander

3
Visual Studio'da hata ayıklama yapıyorsanız, proje özelliklerinizin Hata Ayıkla sekmesinde "Visual Studio barındırma işlemini etkinleştir" seçeneğinin işaretini kaldırabilirsiniz. Sonra exe adınızı "vshost" bölümü olmadan kullanabilirsiniz.
Daniel Vygolov

1
@golavietnam Lütfen bu konuda bana yardımcı olabilir misiniz, talimatlarınızı denedim ve sağladığınız bağlantıdaki talimatları kullanarak ama yine de çalışmıyor. Webbrowser denetimini kullanarak WhatIsMyBrowser.com ziyaret ettiğimde, ie11 AMA yani 7 uyumluluk modunda kullandığımı ve birçok web sitesinin çalışmayı reddettiğini ve bana "tarayıcınızı yükseltin" mesajı verdiğini söylüyor. Nasıl webbrowser kontrol yani en son sürümünü kullanmaya zorlayabilir miyim (ie11) bu şekilde çalışmıyor, ben yüz kez denedim.
jay_t55

Teşekkür ederim, işe yaradı ve günümü kurtardı
Tấn Nguyên

18

En göz Mono.WebBrowser kontrolü - (Safari tarafından kullanıldığı gibi) (ActiveX kullanmadan) WinForms içine (Firefox tarafından kullanıldığı gibi) ya da WebKit o da Gecko gömer.


16

Bu bir 'değiştirme' WebBrowser kontrolü olmadığını biliyorum, ama düzen vb BootStrap 3 + kullanan bir sayfa gösterirken bazı korkunç oluşturma sorunları yaşıyordu ve sonra ben aşağıdaki kullanmak önerdi bir yazı bulundu. Görünüşe göre IE'ye özgü ve oluşturma için istemci makinede bulunan en son varyasyonu kullanmasını söylüyor (bu yüzden varsayılan olduğuna inandığım için IE7 kullanmayacak)

Yani şunu söyleyin:

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

Belgenizin baş kısmında bir yerde.

Tabii ki bu sizin belgeniz değilse, bu açık bir şekilde yardımcı olmaz (yine de webbrowser kontrolü ile kendiniz tarafından oluşturulmamış sayfaları okuyorsanız kişisel olarak bir güvenlik deliği olarak görüyorum - neden sadece bir web tarayıcısı kullanmıyorsunuz!)

İyi şanslar.


Eğer IE7 çalışan bir PC'de çalışması için bu istiyorsan, koymazsam yerde de <head>, çok ilk çocuk olarak koydu <head>. Bunu çözmemiz biraz zaman aldı.
Sylvain

Üzgünüm önceki yorumda IE8 değil IE7 demek istedim. Yani IE8'de, <meta>ilk alt <head>öğesi olarak yerleştirmezseniz, kenar modunda değil uyumluluk modunda çalışır.
Sylvain

Bir winform uygulamasında webbrowser eklentisini kullanıyordum ve bu çok yardımcı oldu. Vurduğu sayfa IE10 yüklü olmasına rağmen tarayıcının IE7 olduğunu düşündüğü için boğucu olan jquery & angularjs kullanıyordu.
Kywillis

Bu iş benim için! Bunu, IE'nin belirli bir sürümüne ayarlamak için de kullanabilirsiniz: <meta http-equiv = "X-UA-Uyumlu" içerik = "IE = 10" /> ve tarayıcı her zaman 10 olarak çalışır (elbette ihtiyacınız aynı sürümü veya daha yüksek bir sürümü yüklemiş olmak
freedeveloper

Bu benim kullanım alanım için mükemmel. Güzel html formatlı raporlar göstermek istiyorum. Zaten orada çok sayıda CSS içeriği var. Bu, chrome / firefox'u gömmekten daha iyi bir yaklaşımdır.
MD Luffy

13

DotNetBrowser kütüphanesine bir göz atın . .NET uygulamasına gömülmesi oldukça kolay olan Chromium tabanlı WPF ve WinForms tarayıcı kontrolleri sağlar. HTML5, CSS3 ve JavaScript dahil tüm modern web standartlarını destekler. Oluşturulan sayfa Google Chrome'daki gibi görünür.

Kütüphane Chromium'un çok işlemli mimarisini devralır - her web sayfası ayrı bir Chromium işleminde işlenir ve uygulama eklenti çökmesinden veya web sayfasında beklenmedik bir hatadan sonra bile çalışmaya devam eder.

DotNetBrowser tarafından sağlanan diğer bazı yararlı özellikler şunlardır: yük olaylarını dinlemek, ağ etkinliğini işlemek, proxy'yi yapılandırmak, kullanıcı işlemlerini simüle etmek, çerezlerle çalışmak, DOM'a erişmek ve değiştirmek, DOM olaylarını dinlemek, .NET'ten JavaScript'i aramak mümkündür ve tersi de geçerlidir, web sayfasında web kamerası ve mikrofon kullanın, WebRTC tabanlı iletişim kurun ve daha fazlasını yapın .

Check out programlama arayüzünü daha fazla ayrıntı için.

Aşağıdaki kod snippet'i, nasıl bir BrowserView oluşturulacağını, bir Forma nasıl yerleştirileceğini ve bir URL'nin nasıl yükleneceğini gösterir:

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

Yukarıdaki örneği çalıştırdığınızda aşağıdaki çıktıyı alırsınız:

resim açıklamasını buraya girin

Kütüphane ticari. Ticari lisanslar, farklı takım boyutları için destek paketleri içerir. Kütüphanenin kaynak kodunu satın almak da mümkündür.

Kendi sayfasında yanında bileşeni olarak kullanılabilir Nuget paketinin gibi VSIX paketinde Visual Studio Pazar Yerinde.


16
Bu ürünün yüksek fiyatına dikkat edin
jjxtra

3
Açık kaynak kodlu değil, lisansı daha ucuz değil.
Ashish-BeJovial

8

Bir avuç Webkit varyantını denedim, ancak tecrübelerime göre hiçbir şey OpenWebkitSharp'ın ilerlemelerini yenemez . Bayıldım .. HTML5 ve CSS3 puanları Google Chrome'a ​​ulaşabildikleri kadar yakın. Çok güzel bir API ve etkinlik modeli. "Uygulanmadı" API'larını büyük olasılıkla Webkit'te uygulanmadığı için bulursanız. Her şey harika çalışıyor.

OpenWebKitSharp, WebKit.NET 0.5 projesine dayanan webkit motoru için bir .net sarmalayıcısıdır. 0.5 sürümüne daha fazla işlevsellik ekler ve bu yapıdan daha fazla yöntem sağlar. OpenWebKitSharp, hem Kahire yapısını (0.5) hem de webkit'in gece yapılarını (varsayılan olarak Nightly) destekler. Sürüm 1.5 Kararlı ve daha fazlası gece inşa dahildir ve bina sonra otomatik olarak kopyalanır. Önceki sürümlerde bu, cairo derlemesinde olur. OpenWebKitSharp şu anda hızlı, istikrarlı ve esnek bir web tarayıcısı olan GTLite Navigator'a güç vermektedir.


1
Teşekkürler. Harika bir keşif gibi görünüyor!
Sylverdrag

Forumları da oldukça aktif ve sorularıma çok hızlı yanıt aldım. Şimdi bunu tüm webbrowser kontrol ihtiyaçlarım için kullanıyorum
Vin

2
Evet, tüm bunları yapar, ExecuteScript'i çağırırsınız. Ancak CefSharp'a geçtim ve size OWS'den daha iyi sevdiğimi söyleyebilirim
Vin

1
Şimdiye kadar kullanmak için uygun olmayan başka bir iğrenç kod karışıklığı.
Kraang Prime

1
webkit cant kullanmıyorum proxy im bu sorun
yaşıyor

7

GÜNCELLEME 2018 MAYIS

Uygulamayı Windows 10'da çalışacak şekilde hedefliyorsanız, artık Edge tarayıcısını Windows Topluluk Araç Seti'ni kullanarak .net uygulamanıza gömebilirsiniz .

WPF Örneği:

1) Windows Topluluk Araç Seti Nuget Paketini yükleyin

Install-Package Microsoft.Toolkit.Win32.UI.Controls

2) XAML Kodu

<Window
    x:Class="WebViewTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WPF="clr-namespace:Microsoft.Toolkit.Win32.UI.Controls.WPF;assembly=Microsoft.Toolkit.Win32.UI.Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WebViewTest"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <WPF:WebView x:Name="wvc" />
    </Grid>
</Window>

3) CS Kodu:

public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();

    // You can also use the Source property here or in the WPF designer
    wvc.Navigate(new Uri("https://www.microsoft.com"));
  }
}

WinForms Örneği:

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();

    // You can also use the Source property here or in the designer
    webView1.Navigate(new Uri("https://www.microsoft.com"));
  }
}

Daha fazla bilgi için lütfen bu bağlantıya bakın .


Nuget Paketini kurdum, ama çalışmıyor. Hala ty.
Deniz

6

EO.WebBrowser'ı deneyin . Yeni ve Chrome tarayıcısının en son sürümünü temel alıyor. Bu konuda en iyi yanı, tek bir .NET dll içindeki her şeyi paketlemesidir, bu yüzden sadece kullanımı ve dağıtımı çok kolay değildir, aynı zamanda bir DLL dll olduğu için aynı DLL hem 32 bit hem de 64 bit'i destekler.


9
Gelecekte, bunun ticari olarak lisanslı bir ürün olduğunu ve ürünle herhangi bir bağlantınız olup olmadığını belirtin, bkz. SSS'lerde Kendi kendini tanıtmaktan kaçının .
Andy Brown

1
Yıllarca çılgın bir şapkacı gibi arama yaptıktan sonra ---- bu "ticari" kontrol kelimenin tam anlamıyla IE için SADECE çalışan drop-in yedek olduğunu ve etrafında yalamak zorunda değildi ve mevcut tarayıcıları herhangi bir vida ayarlar. - Eğer işaretleme, ben herhangi bir şekilde şekil veya biçimde EO ile ilişkili DEĞİLDİR. Tüm diğer çözümlerin tamamen çöp olduğunu ve herkesin zamanının tamamen israf edildiğini duyuyorum.
Kraang Prime

@SanuelJackson GeckoFx şirketimde mükemmel çalışıyor ve tarayıcı ayarları ile ilgili herhangi bir soruna neden olmadı
Wayne

@Wayne - bu senin için iyi. Bu açık projelerin hiçbiri, yönetilen kod olarak çalışmak için önemli bir değişiklik gerektiren, özellikle bir açılan winforms kontrolü olarak bir drop-in değiştirme değildir. IE kontrolünün sunduğu işlevsellikten yoksundurlar ve / veya sürekli çöktükleri veya yavaş oldukları için tam s__t'dirler - burada tüm sorunları listeleyemezler. Belki başka bir on yıl içinde internet artık web tarayıcıları gerektirmez, belki de geçerli bir şey çalışır durumda olacaktır.
Kraang Prime

@SanuelJackson Hmm, söylediklerinin doğru olmasını dilerdim. Ne yazık ki hiçbir alternatifin (GeckoFX dahil) benim için herhangi bir gösteri durdurma hatası yoktu. Ayrıca, Objects Essential Objects tarayıcısının yüksek fiyatından kaçınabilseydim. Ama benim için kusursuz çalışan tek kişi oydu.
Maiken Roskilde

5

GeckoFX kullandım ve bana çok iyi hizmet ediyor. Firefox motorunu kullanır. Onunla şimdiye kadar karşılaştığım tek uyarı, belge aslında tamamen yüklenmeden önce bir kez "DocumentLoaded" olayı yayar ... Ben HTML yüklendiğinde bir vuruyor, sonra tüm görüntüler ve şeyler yüklenir. Sadece birincisini görmezden gelerek düzelttim ve şimdiye kadar başarısız olmadan güzel çalıştı.

Burada bulabilirsiniz: https://bitbucket.org/geckofx/

Çoğu iyi kütüphane gibi, açık kaynak kodludur.


2
Çalışan tüm firefox tabanlı bileşenler, kullanıcılara Firefox'u yükler. Neyse ki, bu çözümlerin çoğu hiç çalışmıyor ve şanslıysa, Firefox ayarlarınızı incelikli tutar - çok şanslı değil, tüm ayarlarınızı kaybedersiniz ve hala bir drop-in olarak IE'den daha iyi bir şey yoktur.
Kraang Prime

1
Bağlantı öldü ve eski yapıdan. bitbucket.org/geckofx mevcut sürüm var
Wayne

@Sanual Jackson - Yıllardır GeckoFx'i kullandım ve kullanıcının Firefox'u yüklemesiyle ilgili hiçbir sorun yaşamadım - kendim de dahil. Sadece tahmin ediyor musun?
PandaWood

3

MozNet, daha önce az çok terk edilmiş GeckoFX kontrolüne dayanan bir .NET kontrolüdür, ancak tam geliştirme aşamasındadır ve GeckoFX'in bir çubuğu sallayabileceğinden çok daha fazla özelliğe sahiptir. Sen de bulabilirsiniz Se7en Yumuşak web.


1
GeckoFX aktif olarak geliştiriliyor: bitbucket
Wayne


2

Güncelleme 2016:

Önerebileceğim 3 ek seçenek var:

1. BrowseEmAll.Cef

Chrome motorunu .Net Uygulamanıza entegre etmek için kullanılabilecek bir .Net bileşeni . CefGlue tabanlı ancak en son Chrome sürümü güncellemelerinde biraz daha hızlı. Ayrıca, bazıları için kullanışlı olabilecek ticari bir destek seçeneği de mevcuttur. Tabii ki bileşenin kendisi açık kaynak .

2. BrowseEmAll.Gecko

Firefox motorunu .Net uygulamanıza entegre etmek için kullanılabilecek başka bir .Net bileşeni . Bu Geckofx'e dayanmaktadır, ancak Geckofx'in mevcut sürümünün aksine, bu normal bir Firefox sürümüyle çalışacaktır. Geckofx'i kullanmak için Firefox'u kendiniz oluşturmanız gerekir. Yine ticari destek mevcuttur, ancak bileşenin kendisi tamamen açık kaynaklıdır .

3. BrowseEmAll Core API'sı

Net Uygulamanızdaki tüm farklı tarayıcılara mı ihtiyacınız var? Hangi BrowseEmAll Core API'sini Chrome, Firefox, Webkit ve Internet Explorer'ı uygulamanıza entegre edebilirsiniz. Bu ticari bir üründür ancak uyarılmalıdır.

(Tam açıklama: Bu şirket için çalışıyorum, bu yüzden söylediğim her şeyi bir tuz tanesi ile alın)



1

Geckofx ve Webkit.net ilk başta umut vaat ediyorlardı, ancak Internet Explorer geliştikçe sırasıyla Firefox ve Chrome ile güncel kalmadılar, ne de IE sürümünden bağımsız olarak varsayılan olarak IE7 gibi davranmasına rağmen Webbrowser kontrolü de yaptı. ancak bu kayıt defterine giderek ve HTML5 izin IE9 olarak düzeltilerek düzeltilebilir.




0

Orada olan tüm tarayıcıları denedim. Ne yazık ki, her koşulda benim için gerçekten işe yarayan tek kişi EO.Browser'dı. Keşke ücretsiz bir çözüm seçebilseydim, ama EO.Browser ile sonuçlandım. Oldukça pahalı, ama iyi yapılmaktadır.


0

Güncelleme 2016:

Bana göre, IE için tek güvenilir, bakımlı tarayıcı EO.WebBrowser. Günleri ve haftaları diğerlerini deneyerek geçirdim. Hepsinde benim için bir noktada gösteriyi durduran bazı sorunlar vardı.


1
Şey ... Bir hafta boyunca uğraştım mı? MS WebBrowser'ın çalışmasını sağlamaya çalışıyor - hepsi boşuna. İlk kez benim için çalışan EO.WebBrowser hariç diğerleri denemedim =: - {. EO ile 20 dakika ve MS ile 5 güne karşı başarısı ve tam ve mutlak bir başarısızlık. Şimdi tek yapmam gereken 'başarı' satın almak için 750 $ bulmak!
Richard Hammond

0

Burada WebKitX gibi ticari bir ürüne bakmaya değer olabilir : https://www.webkitx.com

resim açıklamasını buraya girin

Chromium Embedded Framework kullanır ve Windows XP, 7, 8, 10'da HTML5, WebGL, PDF ve Flash oluşturur. Ayrıca, kontrolün 32 bit ve 64 bit lezzetlerini sunar.

IE WebBrowser denetimine benzer COM nesnelerini kullanarak DOM erişimi sunar:

resim açıklamasını buraya girin

JavaScript'i skaler bağımsız değişkenler geçirerek (eval kullanmadan) işlev adına göre çağırabilirsiniz ve ayrıca Angular için JavaScript geri çağrıları vardır :

resim açıklamasını buraya girin

JavaScript'e kendi çalışabilir COM nesnelerinizi ekleyebilirsiniz:

resim açıklamasını buraya girin

Citrix ortamları için devre dışı bırakabileceğiniz HTML5 oyunları için WebGL / WebAudio'yu destekler:

resim açıklamasını buraya girin


Üretimde kullanıyorum ve tamamen güveniyorum. Diğerlerini denedim ve bu tarayıcıya takılı kaldım. Geliştiriciler gerçekten iyi ve "kişisel". Diğerleri gibi yalnız hissetmedim. Gerçekten iyi ve istikrarlı bir ürün.
tmighty

SO sorumluluk reddi talep ediyor, bu yüzden Elias'ın WebkitX'in yaratıcıları olan mobilefx'in
CTO'suna işaret
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.