Mengganti kontrol .NET WebBrowser dengan browser yang lebih baik, seperti Chrome?

433

Apakah ada cara yang relatif mudah untuk menyisipkan peramban modern ke dalam aplikasi .NET?

Sejauh yang saya mengerti, WebBrowserkontrol adalah pembungkus untuk IE , yang tidak akan menjadi masalah kecuali bahwa itu terlihat seperti versi IE yang sangat lama , dengan semua yang diperlukan dalam hal pengacakan CSS, potensi risiko keamanan (jika mesin rendering tidak ditambal, bisakah saya benar-benar berharap masalah buffer overflow zillion diperbaiki?), dan masalah lainnya.

Saya menggunakan Visual Studio C # (edisi ekspres - apakah ada bedanya di sini?)

Saya ingin mengintegrasikan peramban web yang baik dalam aplikasi saya. Dalam beberapa, saya hanya menggunakannya untuk menangani proses pendaftaran pengguna, antarmuka dengan beberapa fitur situs web saya dan hal-hal lain dari pesanan itu, tetapi saya memiliki aplikasi lain dalam pikiran yang akan memerlukan lebih banyak ... kontrol.

Saya butuh:

  • Peramban yang dapat berintegrasi di dalam jendela aplikasi saya (bukan jendela terpisah)
  • Dukungan yang baik untuk CSS, js dan teknologi web lainnya, setara dengan browser modern apa pun
  • Fungsi-fungsi dasar browser seperti "navigasi", "kembali", "muat ulang" ...
  • Akses bebas ke kode halaman dan output.

Saya berpikir tentang Chrome, karena itu ada di bawah lisensi BSD, tapi saya akan senang dengan versi IE yang terbaru.

Sebisa mungkin, saya ingin membuat hal-hal sederhana. Yang terbaik adalah jika seseorang dapat menambal WebBrowserkontrol yang ada , yang sudah sekitar 70% dari apa yang saya butuhkan, tapi saya pikir itu tidak mungkin.

Saya telah menemukan kontrol activeX untuk Mozilla ( http://www.iol.ie/~locka/mozilla/control.htm ) tetapi sepertinya ini adalah versi lama, jadi itu belum tentu merupakan peningkatan.

Saya terbuka untuk saran

Sylverdrag
sumber
19
Mengapa Anda mengatakan bahwa kontrol WebBrowser menggunakan versi lama IE? Ia menggunakan versi yang diinstal pada sistem pengguna, meskipun WebBrowser IE8 tampaknya default untuk rendering IE7: blogs.msdn.com/ie/archive/2009/03/10/…
Tim Robinson
17
Karena tidak terlihat seperti itu di mesin saya. Saya telah menginstal IE8 tetapi kontrol menunjukkan masalah tampilan yang belum saya lihat sejak IE 5. Bentuk login yang sangat sederhana, 2 bidang dengan sentuhan CSS memiliki tampilan yang kacau, dan beberapa tampilan javascript tidak berfungsi, sedangkan itu menampilkan baik di IE8, Firefox, Chrome, Opera ... jadi saya berasumsi mesin rendering itu sudah tua. Saya bisa salah sepenuhnya tentang itu dan mungkin masalahnya sebenarnya berbeda dari apa yang saya pikirkan.
Sylverdrag
3
@Sylverdrag: Anda salah. Ia menggunakan IE terbaru pada sistem Anda. Namun, saya membaca di suatu tempat bahwa kontrol WebBrowser memiliki masalah kompatibilitas mundur yang lebih kuat daripada browser mandiri. IE8 dapat memiliki, misalnya, ikon untuk mengklik untuk mengaktifkan mode IE7. Sebagai bagian dari program Anda, ini tidak mungkin, jadi kontrol default ke mode sebelumnya untuk kompatibilitas. OTOH, saya belum membaca cara mengaturnya untuk menggunakan "mode IE8".
John Saunders
55
Sebenarnya, John Sanders, Anda salah. Ia menggunakan ie4 dan Anda perlu mengubah nilai registri untuk memberitahu itu untuk menggunakan saat ini. Cari "emulasi mode fitur" dan Anda akan mendapatkan jawaban Anda, diubah baru-baru ini, digunakan untuk memasukkan kata kunci asli tetapi mereka mengubahnya, google kata kunci yang saya sebutkan dengan "kontrol webbrowser" dan Anda akan menemukan artikel msdn.
Erx_VB.NExT.Coder
8
Secara default, WebBrowserkontrol yang dihosting menggunakan emulasi IE7, kecuali diperintahkan sebaliknya FEATURE_BROWSER_EMULATION. Hal ini didokumentasikan di sini: blogs.msdn.com/b/askie/archive/2009/03/23/...
noseratio

Jawaban:

171

Checkout CefSharp. Net binding, sebuah proyek yang saya mulai beberapa waktu lalu yang untungnya diambil oleh komunitas dan berubah menjadi sesuatu yang luar biasa.

Proyek ini membungkus Kerangka Tertanam Chromium dan telah digunakan di sejumlah proyek besar termasuk klien Windows Rdio, Facebook Messenger untuk Windows dan Github untuk Windows.

Ini fitur kontrol browser untuk WPF dan Winforms dan memiliki banyak fitur dan poin ekstensi. Berbasis pada Chromium juga sangat cepat.

Raih dari NuGet: Install-Package CefSharp.WpfatauInstall-Package CefSharp.WinForms

Lihat contoh dan berikan pemikiran / umpan balik / tarik-permintaan: https://github.com/cefsharp/CefSharp

BSD Berlisensi

chillitom
sumber
2
Saya beralih ke CEfSharp dari OWS, dan saya dapat dengan tegas mengatakan itu adalah komunitas yang sangat berkualitas dan aktif. Suka. github.com/cefsharp/CefSharp
Vin
1
CefSharp sangat bagus tetapi perlu diketahui bahwa perpustakaannya sangat besar (20+ mb terakhir saya melihat) sehingga mereka mungkin tidak tepat untuk proyek yang lebih ringan.
Skyl3lazer
1
@Anguyen ya Anda bisa
chillitom
1
Sangat senang mengetahui bahwa Andalah yang memulai proyek ini! Baru-baru ini saya menggunakan cefsharp, namun, saya bisa melihat bahwa ukuran pustaka adalah 80+ MB yang besar, tetapi diperlukan untuk berfungsinya dengan baik (Terutama rendering halus) dari aplikasi. Apakah ada cara untuk mengurangi ini?
Aditya Bokade
5
Ini merusak proyek saya. Semua referensi rusak setelah menginstal paket nuget winforms.
toddmo
84

Chrome menggunakan (fork of) Webkit jika Anda tidak tahu, yang juga digunakan oleh Safari. Inilah beberapa pertanyaan yang sama:

Webkit yang satu tidak bagus seperti yang dinyatakan oleh jawaban lainnya, satu versi tidak lagi berfungsi (kode google) dan versi Mono bersifat eksperimental. Akan lebih baik jika seseorang melakukan upaya untuk membuat pembungkus .NET yang layak untuk itu tetapi itu bukan sesuatu yang tampaknya ingin dilakukan siapa pun - yang mengejutkan mengingat sekarang memiliki dukungan untuk HTML5 dan begitu banyak fitur lain yang dimiliki IE (8). ) mesin kurang.

Pembaruan (2014)

Ada proyek berlisensi ganda baru yang memungkinkan Anda menanamkan Chrome ke dalam aplikasi .NET yang disebut Awesomium . Itu datang dengan api NET. Tetapi membutuhkan beberapa hacks untuk rendering (contoh menggambar jendela browser ke buffer, cat buffer sebagai gambar dan menyegarkan pada timer).

Saya pikir ini adalah browser yang digunakan oleh Origin di Battlefield 3.

Pembaruan (2016)

Sekarang ada DotnetBrowser , alternatif komersial untuk Awesomium. Berbasiskan Chromium.

Chris S
sumber
Terima kasih. Saya akan melihat bungkus Gecko. Namun satu hal, jawaban aslinya mengatakan "Yang perlu Anda lakukan adalah mendaftarkan kontrol Mozilla ActiveX" dan saya pikir edisi Express tidak dapat mendaftarkan kontrol tambahan. Apakah saya kehilangan sesuatu yang jelas?
Sylverdrag
4
@Syl edisi ekspres dapat mendaftarkan sebanyak mungkin kontrol yang Anda butuhkan. Yang tidak akan mereka lakukan adalah membiarkan Anda memasang plugin ke visual studio.
Joel Coehoorn
1
Saya memiliki pengalaman yang sangat buruk menggunakan WebKit dengan C # dan akhirnya saya harus puas dengan komponen browser web default yang datang dengan .NET
Sumit Ghosh
1
Pada tanggal ini, proyek-proyek di atas tidak dapat diganti drop-in. Kesalahan kompiler banyak + ketidakstabilan. Awesomium, lengkap dan mengeluarkan sampah.
Kraang Prime
"Saya pikir ini adalah browser yang digunakan oleh Origin di Battlefield 3." Ini salah. Saya tahu ini karena saya harus memaksa aplikasi ini untuk menggunakan yaitu pada windows sepuluh karena ketika itu default ke tepi tidak berfungsi. Ini beberapa waktu yang lalu, mungkin masalah yang terpecahkan.
Theyouthis
64

Saya telah menguji alternatif untuk komponen browser Web C # selama beberapa hari sekarang dan di sini adalah daftar saya:

1. Menggunakan versi IE yang lebih baru 8,9:

Komponen Browser Web adalah IE7 bukan IE8? Bagaimana cara mengubahnya?

Pro:

  • Tidak banyak pekerjaan yang diperlukan untuk menjalankannya
  • beberapa dukungan HTML5 / CSS3 jika IE9, penuh jika IE10

Cons:

  • Mesin target harus memiliki versi target IE yang diinstal, IE10 masih dalam pratinjau pada Win7

Ini tidak memerlukan banyak pekerjaan dan Anda bisa mendapatkan dukungan HTML5 dan CSS3 meskipun IE9 tidak memiliki beberapa fitur CSS3 dan HTML5 terbaik. Tapi saya yakin Anda bisa menjalankan IE10 dengan cara yang sama. Masalahnya adalah bahwa sistem target harus menginstal IE10, dan karena masih dalam pratinjau pada Windows 7 saya akan menyarankan menentangnya.

2. OpenWebKitSharp

OpenWebKitSharp adalah pembungkus .net untuk mesin webkit berdasarkan proyek WebKit.NET 0.5. WebKit adalah mesin tata letak yang digunakan oleh Chrome / Safari

Pro:

  • Dikembangkan secara aktif
  • Dukungan HTML5 / CSS3

Cons:

  • Banyak fitur yang tidak diimplementasikan
  • Tidak mendukung x64 (Aplikasi harus dibangun untuk x86)

OpenWebKit cukup bagus walaupun banyak fitur belum diimplementasikan, saya mengalami beberapa masalah menggunakannya dengan visual studio yang melempar referensi objek nol di sini dan kemudian dalam mode desain, ada beberapa masalah js. Semua orang yang menggunakannya akan segera menyadari bahwa js alert tidak melakukan apa-apa. Acara seperti mouseup, mousedown ... dll tidak bekerja, js drag and drop buggy dan sebagainya ..

Saya juga mengalami beberapa kesulitan untuk menginstalnya karena memerlukan versi khusus VC yang dapat diinstal ulang, jadi setelah pengecualian saya melihat log peristiwa, menemukan versi VC dan menginstalnya.

3. GeckoFX

Pro:

  • Bekerja pada mono
  • Dikembangkan secara aktif
  • Dukungan HTML5 / CSS3

Cons:

  • 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 lihat di bawah ̶x̶8)

GeckoFX adalah kontrol Webrowser lintas platform untuk menanamkan ke dalam Aplikasi WinForms. Ini dapat digunakan dengan .NET di Windows dan dengan mono di Linux. Gecko adalah mesin tata letak yang digunakan oleh Firefox.

Saya menemukan beberapa informasi bahwa GeckoFX tidak dikembangkan secara aktif yang tidak benar, tentu saja selalu satu atau dua versi di belakang Firefox tetapi itu normal, saya benar-benar terkesan dengan aktivitas dan kontrol itu sendiri. Itu melakukan semua yang saya butuhkan, tapi saya butuh waktu untuk menjalankannya, berikut ini adalah sedikit tutorial untuk membuatnya berjalan:

  1. Unduh GeckoFx-Windows-16.0-0.2 , di sini Anda dapat memeriksa apakah GeckoFX yang lebih baru tersedia
  2. Tambahkan referensi ke dua dll yang diunduh
  3. Karena GeckoFX adalah pembungkus, Anda memerlukan XulRunner, buka Daftar Versi untuk melihat mana yang Anda butuhkan
  4. Sekarang kita tahu versi XulRunner mana yang kita butuhkan, kita pergi ke rilis Mozilla XulRunner , buka folder versi -> runtimes -> xulrunner- (your_version) .en-US.win32.zip, dalam kasus kami xulrunner-16.0.en- US.win32.zip
  5. Buka zip semua dan salin semua file ke bin Anda \ Debug (atau lepaskan jika proyek Anda diatur untuk dirilis)
  6. Buka perancang visual studio dari formulir Anda, pergi ke kotak alat, klik kanan di dalam -> Pilih item -> Jelajahi -> Temukan file dll winform GeckoFX yang didownload -> OK
  7. Sekarang Anda harus memiliki GeckoWebBrowser kontrol baru

Jika Anda benar-benar harus menggunakan Chrome, lihat produk ini bernama Awesomium , gratis untuk proyek non-komersial, tetapi lisensi beberapa ribu dolar untuk komersial.

formatc
sumber
4
Deskripsi yang sangat bagus tentang cara menjalankan GeckoFx. +1
Alex Essilfie
ketika membangun Geckofx-Winforms saya membutuhkan 4 gtk # libraries (atk-sharp, gdk-sharp, glib-sharp dan gtk-sharp), jadi saya harus menginstal Mono terlebih dahulu.
bernhardrusch
Jawaban ini sangat spektakuler.
Mike Cole
Memang analisis yang bagus. Saya ingin tahu apakah Anda kebetulan menguji Awesomium dengan aplikasi C #. Apakah Anda punya pendapat tentang itu? Saya belum mengujinya tetapi tampaknya dapat diandalkan bagi saya setelah melihat panel pengawas yang mereka sebutkan di halaman mereka.
Abdul Rehman
2
@Wayne jika Anda ingin melakukannya dengan benar, Anda harus membuat folder di proyek Anda atau proyek speparate di mana Anda akan memasukkan semua file, gecko fx dlls dan file xul runner dan mengaturnya untuk menyalin selalu, kemudian pada setiap tindakan membangun mereka akan mendapatkan disalin ke folder build / debug Anda atau diterbitkan jika Anda menerbitkan dari VS, ada juga metode Xpcom. Inisialisasi yang harus Anda panggil dan Anda dapat meneruskannya jalur file xul runner, harap itu membantu
formatc
41

Saya memiliki masalah yang sama, WebBrowser menggunakan versi lama IE, dengan beberapa googling saya menemukan kode berikut yang membuat perubahan ke dalam registri dan membuat WebBrowser untuk menggunakan versi IE terbaru yang mungkin:

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

Anda hanya perlu membuat kelas dan memasukkan kode ini di dalamnya, lalu jalankan kode berikut saat program dimulai:

 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

Anda dapat menggunakannya seperti:

If Not WBEmulator.IsBrowserEmulationSet() Then
    WBEmulator.SetBrowserEmulationVersion()
End If
Ashkan Mobayen Khiabani
sumber
1
Luar biasa !! Terima kasih banyak!
Ben
1
Diterjemahkan ke Python (bekerja pada aplikasi IronPython) dan berfungsi dengan baik. Terima kasih!
David
1
Itu menyelamatkan hidupku! Terima kasih
Neeraj Dubey
1
Ini fantastis tetapi apakah mungkin untuk mereset versi emulasi? Tampaknya versi ini hanya dapat diatur sekali dalam aplikasi WinForms. Sementara itu mungkin untuk mengatur ulang tampaknya efeknya adalah bahwa, sekali diatur, dan reset dalam registri itu tidak dibaca kembali dengan nilai-nilai registri baru di aplikasi WinForms.
cymorg
1
@ DarrenMB sejauh yang saya tahu menggunakan IE11
Ashkan Mobayen Khiabani
27

Anda dapat menggunakan registri untuk mengatur versi IE untuk kontrol server web. Pergi ke: HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION dan tambahkan "yourApplicationName.exe" dengan nilai browser_emulation Untuk melihat nilai browser_emulation, lihat tautan: http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation

golavietnam
sumber
10
Dan jika Anda melakukan debug di studio visual, Anda mungkin harus menggunakan "yourApplicationName.vshost.exe"
newenglander
3
Dan jika Anda melakukan debug di studio visual, Anda mungkin dapat menghapus centang "Aktifkan proses hosting Visual Studio" di tab Debug properti proyek Anda. Kemudian Anda dapat menggunakan nama exe Anda tanpa bagian "vshost".
Daniel Vygolov
1
@golavietnam Tolong bantu saya dengan ini, saya mencoba instruksi Anda dan menggunakan instruksi pada tautan yang Anda berikan tetapi masih tidak berhasil. Ketika saya mengunjungi WhatIsMyBrowser.com menggunakan kontrol webbrowser, saya diberitahu bahwa saya menggunakan ie11 TETAPI dalam 7 mode kompatibilitas dan banyak situs web menolak untuk bekerja dan memberi saya pesan "tolong tingkatkan browser Anda". Bagaimana saya bisa memaksa kontrol webbrowser untuk menggunakan versi terbaru yaitu yang diinstal (ie11) dengan cara ini tidak berfungsi, saya sudah mencobanya ratusan kali.
jay_t55
Terima kasih, ini berhasil dan menyelamatkan hari saya
Tấn Nguyên
18

Lihat di kontrol Mono.WebBrowser - ia menyematkan Gecko (seperti yang digunakan oleh Firefox) atau WebKit (seperti yang digunakan oleh Safari) ke WinForms (tanpa menggunakan ActiveX).

RichieHindle
sumber
16

Saya tahu ini bukan kontrol 'pengganti' WebBrowser, tapi saya mengalami beberapa masalah rendering yang mengerikan sambil menunjukkan halaman yang menggunakan BootStrap 3+ untuk tata letak dll dan kemudian saya menemukan posting yang menyarankan saya menggunakan yang berikut. Tampaknya ini khusus untuk IE dan menyuruhnya untuk menggunakan variasi terbaru yang ditemukan pada mesin klien untuk rendering (jadi itu tidak akan menggunakan IE7 karena saya percaya adalah default)

Jadi cukup cantumkan:

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

suatu tempat di bagian kepala dokumen Anda.

Jika tentu saja itu bukan dokumen Anda, maka ini jelas tidak akan membantu (meskipun saya pribadi menganggapnya sebagai lubang keamanan jika Anda membaca halaman yang tidak dibuat sendiri melalui kontrol webbrowser - mengapa tidak menggunakan webbrowser!)

Semoga berhasil.

Kode Unimpressed
sumber
Jika Anda ingin ini berfungsi pada PC yang menjalankan IE7, jangan letakkan di suatu tempat<head> , letakkan sebagai anak pertama <head>. Kami butuh waktu untuk memikirkannya.
Sylvain
Maaf saya maksudkan IE8 bukan IE7 di komentar saya sebelumnya. Jadi pada IE8, jika Anda tidak menempatkan <meta>anak pertama <head>, ia akan berjalan dalam mode kompatibilitas, bukan dalam mode tepi.
Sylvain
Saya menggunakan plugin webbrowser di aplikasi winform dan ini sangat membantu. Halaman yang saya tekan menggunakan jquery & angularjs yang tersedak karena mengira browser itu IE7 walaupun saya sudah menginstal IE10.
Kywillis
Itu berhasil untuk saya! Anda juga dapat menggunakan ini untuk mengatur ke versi IE tertentu misalnya: <meta http-equiv = "Kompatibel dengan X-UA" content = "IE = 10" /> dan selalu browser berfungsi sebagai 10 (tentu saja Anda perlu untuk menginstal versi yang sama atau lebih tinggi
freedeveloper
Ini sangat cocok untuk penggunaan saya. Saya ingin menampilkan laporan berformat html yang lebih bagus. Sudah banyak konten CSS yang tersedia di luar sana. Ini adalah pendekatan yang lebih baik daripada menanamkan chrome / firefox.
MD Luffy
13

Lihatlah perpustakaan DotNetBrowser . Ini memberikan kontrol browser WPF dan WinForms berbasis Chromium, yang cukup mudah untuk dimasukkan ke dalam aplikasi .NET. Ini mendukung semua standar web modern termasuk HTML5, CSS3, dan JavaScript. Halaman yang dirender terlihat persis seperti di Google Chrome.

Perpustakaan mewarisi arsitektur multi-proses Chromium - setiap halaman web dirender dalam proses Chromium yang terpisah, dan aplikasi akan terus bekerja bahkan setelah plugin crash atau kesalahan tak terduga lainnya terjadi pada halaman web.

Berikut adalah beberapa fitur berguna lainnya, yang disediakan oleh DotNetBrowser: dimungkinkan untuk mendengarkan memuat acara, menangani aktivitas jaringan, mengkonfigurasi proxy, mensimulasikan tindakan pengguna, bekerja dengan cookie, mengakses dan memodifikasi DOM, mendengarkan acara DOM, memanggil JavaScript dari .NET dan sebaliknya, menggunakan kamera web dan mikrofon di halaman web, mengatur komunikasi berbasis WebRTC, dan banyak lagi .

Lihat Referensi API untuk lebih jelasnya.

Cuplikan kode di bawah ini menunjukkan cara membuat BrowserView, menanamkannya ke dalam Formulir, dan memuat 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");
        }
    }
}

Setelah Anda menjalankan contoh di atas, Anda akan mendapatkan output berikut:

masukkan deskripsi gambar di sini

Perpustakaan bersifat komersial. Lisensi komersial termasuk paket dukungan untuk ukuran tim yang berbeda. Dimungkinkan juga untuk membeli kode sumber perpustakaan.

Selain halamannya sendiri, komponen tersedia sebagai paket NuGet dan sebagai paket VSIX di Visual Studio Marketplace.

Vladimir
sumber
16
Waspadai harga tinggi produk ini
jjxtra
3
Ini bukan open source, lisensi itu tidak lebih murah.
Ashish-BeJovial
8

Saya sudah mencoba beberapa varian Webkit, tetapi dalam pengalaman saya tidak ada yang mengalahkan kemajuan yang dimiliki OpenWebkitSharp . Love it love it .. Skor HTML5 dan CSS3 sedekat mungkin ke Google Chrome. API dan model acara yang sangat bagus. Jika Anda menemukan "tidak diimplementasikan" kemungkinan besar API karena mereka tidak diterapkan di Webkit. Semuanya bekerja dengan baik.

OpenWebKitSharp adalah pembungkus .net untuk mesin webkit berdasarkan proyek WebKit.NET 0.5. Ini menambahkan fungsionalitas lebih ke versi 0.5 dan menyediakan lebih banyak metode daripada yang membangun. OpenWebKitSharp mendukung build Kairo (0,5) dan build webkit malam hari (Nightly secara default). Dalam Versi 1.5 Stabil dan lebih banyak bangunan malam disertakan dan secara otomatis disalin setelah bangunan. Dalam versi sebelumnya ini terjadi dengan build Kairo. OpenWebKitSharp saat ini mendukung GTLite Navigator, peramban web yang cepat, stabil dan fleksibel.

Vin
sumber
1
Terima kasih. Itu terlihat seperti penemuan hebat!
Sylverdrag
Forum mereka juga cukup aktif, dan saya mendapat tanggapan yang sangat cepat untuk pertanyaan saya. Sekarang saya menggunakan ini untuk semua kebutuhan kontrol browser web saya
Vin
2
Ya, ia melakukan semua itu, Anda memanggil ExecuteScript. Namun saya beralih ke CefSharp dan saya dapat memberitahu Anda bahwa saya menyukainya jauh lebih baik daripada OWS
Vin
1
Kekacauan kode menjijikkan lainnya yang tidak dapat digunakan untuk apa pun.
Kraang Prime
1
berhati-hatilah webkit tidak dapat menggunakan proxy yang memiliki masalah dengan ini
skhurams
7

PEMBARUAN 2018 MEI

Jika Anda menargetkan aplikasi untuk dijalankan pada Windows 10, maka sekarang Anda dapat menanamkan browser Edge ke aplikasi .net Anda dengan menggunakan Windows Community Toolkit .

Contoh WPF:

1) Instal Paket Nugget Toolkit Windows Community

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

2) Kode XAML

<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) Kode CS:

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

Contoh WinForms:

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

Silakan merujuk ke tautan ini untuk informasi lebih lanjut.

Rahul
sumber
Saya menginstal Paket Nuget, tetapi tidak berfungsi. Masih ty.
Deniz
6

Coba EO.WebBrowser . Ini baru dan didasarkan pada versi terbaru dari browser Chrome. Bagian terbaik tentang itu adalah bahwa paket semuanya di dalam satu. NET dll sehingga tidak hanya sangat mudah digunakan dan digunakan, tetapi juga DLL yang sama mendukung 32 bit dan 64 bit karena itu. NET dll.

pengguna2540812
sumber
9
Di masa depan harap nyatakan bahwa ini adalah produk berlisensi komersial, dan apakah Anda memiliki afiliasi dengan produk atau tidak, lihat Menghindari promosi diri secara terbuka di FAQ.
Andy Brown
1
Setelah mencari seperti orang gila selama bertahun-tahun ---- kontrol "komersial" ini secara harfiah adalah pengganti drop-in untuk HANYA yang tidak perlu saya ikuti dan tidak mengacaukan salah satu browser saya saat ini pengaturan. - jika ditandai, saya TIDAK terkait dengan EO dalam bentuk atau cara apa pun. Saya kesal karena semua solusi lain ini benar-benar sampah yang sempurna dan buang-buang waktu semua orang.
Kraang Prime
@SanuelJackson GeckoFx bekerja dengan baik di perusahaan saya dan tidak menyebabkan masalah dengan pengaturan browser
Wayne
@Wayne - itu bagus untukmu. Tidak satu pun dari proyek terbuka ini merupakan pengganti drop-in yang memerlukan modifikasi signifikan untuk berfungsi sebagai kode Terkelola terutama sebagai kontrol win-in drop-in. Mereka tidak memiliki fungsionalitas yang ditawarkan kontrol IE dan / atau s__t lengkap karena crash terus-menerus atau lambat - bahkan tidak dapat membuat daftar semua masalah di sini. Mungkin dalam dekade lain ketika internet tidak lagi membutuhkan browser web, mungkin sesuatu yang layak akan berada dalam kondisi kerja.
Kraang Prime
@SanuelJackson Hmm, saya berharap apa yang Anda katakan itu benar. Sayangnya tidak ada satu pun alternatif (termasuk GeckoFX) yang tidak memiliki kesalahan tampilan untuk saya. Saya juga berharap saya bisa menghindari harga tinggi untuk browser Essential Objects. Tapi itu satu-satunya yang bekerja dengan sempurna untukku.
Maiken Roskilde
5

Saya telah menggunakan GeckoFX dan itu sangat membantu saya. Ini menggunakan mesin Firefox. Satu-satunya peringatan yang pernah saya temui, adalah bahwa ia memancarkan event "DocumentLoaded" satu kali sebelum dokumen benar-benar dimuat penuh ... Saya pikir itu akan menembak keluar satu ketika HTML dimuat, dan kemudian satu lagi ketika semua gambar dan barang dimuat. Saya sudah memperbaikinya dengan hanya mengabaikan yang pertama, dan itu telah bekerja dengan indah tanpa gagal sejauh ini.

Anda dapat menemukannya di sini: https://bitbucket.org/geckofx/

Seperti kebanyakan perpustakaan yang layak, ini adalah open-source.

Teekin
sumber
2
Semua komponen berbasis firefox yang berfungsi, kencangkan dengan pengguna menginstal Firefox. Untungnya, sebagian besar solusi ini gagal berfungsi sama sekali, dan jika beruntung, itu membuat pengaturan Firefox Anda di-kebijaksanaan --- tidak begitu beruntung, Anda kehilangan semua pengaturan Anda, dan masih tidak ada yang lebih baik daripada IE sebagai drop-in.
Kraang Prime
1
Tautan sudah mati dan dari bangunan lama. bitbucket.org/geckofx memiliki versi saat ini
Wayne
@Sanual Jackson - Saya menggunakan GeckoFx selama bertahun-tahun dan tidak pernah mengalami masalah dengan pemasangan Firefox oleh pengguna - termasuk milik saya. Apakah Anda hanya menebak?
PandaWood
3

MozNet adalah kontrol .NET, yang sebelumnya didasarkan pada kontrol GeckoFX yang kurang lebih ditinggalkan, tetapi sedang dalam pengembangan penuh dan memiliki lebih banyak fitur daripada GeckoFX. Anda dapat menemukannya di situs web Se7en Soft .

pengguna257033
sumber
1
GeckoFX sedang dikembangkan secara aktif di: bitbucket
Wayne
2

Pembaruan 2016:

Ada 3 opsi tambahan yang bisa saya sarankan:

1. BrowseEmAll.Cef

Komponen .Net yang dapat digunakan untuk mengintegrasikan mesin Chrome ke dalam aplikasi .Net Anda. Berdasarkan CefGlue tetapi sedikit lebih cepat pada pembaruan ke versi Chrome terbaru. Juga ada opsi dukungan komersial yang tersedia yang mungkin berguna untuk beberapa. Tentu saja komponen itu sendiri adalah open source .

2. JelajahiEmAll.Gecko

Komponen .Net lain yang dapat digunakan untuk mengintegrasikan mesin Firefox ke dalam aplikasi .Net Anda. Ini didasarkan pada Geckofx tetapi tidak seperti versi Geckofx saat ini, ini akan bekerja dengan versi rilis normal Firefox. Untuk menggunakan Geckofx, Anda harus membuat Firefox sendiri. Lagi-lagi dukungan komersial tersedia tetapi komponen itu sendiri sepenuhnya open source .

3. BrowseEmAll Core API

Perlu semua peramban yang berbeda di Aplikasi .Net Anda? Dengan API BrowseEmAll Core Anda dapat mengintegrasikan Chrome, Firefox, Webkit, dan Internet Explorer ke dalam aplikasi Anda. Ini adalah produk komersial jadi berhati-hatilah.

(Pengungkapan penuh: Saya bekerja untuk perusahaan ini, jadi ambillah semua yang saya katakan dengan sebutir garam)

daniel.herken
sumber
1

Jika Anda mencari kontrol berbasis IE yang bagus - lihat: http://code.google.com/p/csexwb2/

Saya sudah menggunakannya dalam produk-produk produksi. Ini cukup bagus dan memiliki demo yang baik meskipun tampaknya tidak dipertahankan seperti sekarang.

scotru
sumber
1

Geckofx dan Webkit.net keduanya menjanjikan pada awalnya, tetapi mereka tidak tetap up to date dengan Firefox dan Chrome masing-masing sementara Internet Explorer membaik, begitu pula kontrol Webbrowser, meskipun berperilaku seperti IE7 secara default terlepas dari versi IE apa yang Anda miliki tetapi itu bisa diperbaiki dengan masuk ke registri dan mengubahnya ke IE9 memungkinkan HTML5.

pengguna2319683
sumber
0

Saya telah mencoba semua browser yang ada di luar sana. Sayangnya satu-satunya yang benar-benar bekerja untuk saya dalam semua keadaan adalah EO.Browser. Saya berharap saya bisa memilih solusi gratis, tetapi saya berakhir dengan EO.Browser. Itu pricy, tapi terawat dengan baik.

AntonioC
sumber
0

Pembaruan 2016:

Bagi saya, satu-satunya alternatif browser yang dapat diandalkan dan dikelola untuk IE adalah EO.WebBrowser. Saya menghabiskan hari dan minggu untuk mencoba yang lain. Mereka semua memiliki beberapa masalah yang menghentikan pertunjukan untuk saya di beberapa titik.

AntonioC
sumber
1
Yah ... Aku mengobrol sekitar seminggu? mencoba membuat MS WebBrowser berfungsi - semuanya sia-sia. Tidak mencoba yang lain =: - {kecuali EO.WebBrowser yang bekerja untuk saya pertama kali. Jadi itu 20 menit dengan EO dan sukses versus 5 hari dengan MS dan lengkap dan mengucapkan kegagalan memalukan. Yang harus saya lakukan sekarang adalah menemukan $ 750 untuk membeli 'sukses' !!!
Richard Hammond
0

Mungkin patut untuk melihat produk komersial seperti WebKitX di sini: https://www.webkitx.com

masukkan deskripsi gambar di sini

Menggunakan Chromium Embedded Framework dan merender HTML5, WebGL, PDF, dan Flash pada Windows XP, 7, 8, 10. Ini juga menyediakan rasa kontrol 32-bit dan 64-bit.

Ini menawarkan akses DOM menggunakan objek COM mirip dengan kontrol IE WebBrowser:

masukkan deskripsi gambar di sini

Anda dapat memanggil JavaScript berdasarkan nama fungsi dengan argumen skalar (tidak menggunakan eval) dan juga memiliki callback JavaScript untuk Angular :

masukkan deskripsi gambar di sini

Anda dapat menambahkan objek COM yang dapat dioperasikan sendiri ke JavaScript:

masukkan deskripsi gambar di sini

Ini mendukung WebGL / WebAudio untuk game HTML5, yang dapat Anda nonaktifkan untuk lingkungan Citrix:

masukkan deskripsi gambar di sini

Elias
sumber
Saya menggunakannya dalam produksi, dan saya percaya sepenuhnya. Saya sudah mencoba banyak yang lain, dan saya terjebak dengan browser ini. Para dev sangat bagus dan "pribadi". Saya tidak merasa ditinggalkan sendirian seperti banyak orang lain. Produk yang benar-benar bagus dan stabil.
tmighty
SO memerlukan penafian, jadi akan lebih baik bagi Elias untuk menunjukkan bahwa dia adalah CTO mobilefx, yang merupakan pencipta WebkitX
hko