Заміна керування .NET WebBrowser на кращий веб-переглядач, як Chrome?


432

Чи є порівняно простий спосіб вставити сучасний браузер у додаток .NET?

Наскільки я розумію, WebBrowserуправління є обгорткою для IE , що не буде проблемою, за винятком того, що це виглядає як дуже стара версія IE , з усім, що тягне за собою виправлення CSS, потенційні ризики для безпеки (якщо двигун візуалізації не був зафіксований, чи можна реально очікувати, що проблеми з переповненням буфера в мільйони будуть виправлені?) та інші проблеми.

Я використовую Visual Studio C # (експрес-видання - чи це має значення?)

Я хотів би інтегрувати хороший веб-браузер у свої програми. Деякі з них я просто використовую для обробки процесу реєстрації користувача, взаємодії з деякими особливостями мого веб-сайту та іншими речами цього порядку, але я маю на увазі ще одну програму, яка потребує більше помилок ... контролю.

Мені потрібно:

  • Веб-переглядач, який може інтегруватися у вікно моєї програми (не окреме вікно)
  • Хороша підтримка CSS, js та інших веб-технологій нарівні з будь-яким сучасним браузером
  • Основні функції браузера, такі як "навігація", "назад", "перезавантаження" ...
  • Ліберальний доступ до коду сторінки та виводу.

Я думав про Chrome, оскільки він підпадає під ліцензію BSD, але я був би так само задоволений нещодавньою версією IE.

Наскільки це можливо, я хотів би, щоб все було просто. Найкраще було б, якби можна було зафіксувати існуючий WebBrowserелемент управління, який вже складає приблизно 70% того, що мені потрібно, але я не думаю, що це можливо.

Я знайшов управління ActiveX для Mozilla ( http://www.iol.ie/~locka/mozilla/control.htm ), але схоже, що це стара версія, тому це не обов'язково вдосконалення.

Я відкритий для пропозицій


19
Чому ви кажете, що елемент керування WebBrowser використовує стару версію IE? Він використовує версію, встановлену в системі користувача, хоча, як видається, веб- браузер
Тім Робінсон,

17
Тому що це не так виглядає на моїй машині. У мене встановлений IE8, але управління показує проблеми з дисплеєм, яких я не бачив з IE 5. Дуже проста форма входу, у 2 поля з дотиком CSS є гарний дисплей, а деяке відображення javascript не працює, тоді як воно відображається чудово в IE8, Firefox, Chrome, Opera ... тому я припустив, що двигун візуалізації був старим. Я можу з цим абсолютно помилитися, і, можливо, проблема насправді відрізняється від тієї, що я думав.
Сільвердраг

3
@Sylverdrag: Ви помиляєтесь. Він використовує останній IE у вашій системі. Однак я десь прочитав, що управління WebBrowser має сильнішу проблему сумісності назад, ніж автономний браузер. Наприклад, IE8 може мати піктограму для натискання, щоб увімкнути режим IE7. У рамках вашої програми це неможливо, тому керування за замовчуванням застосовується до попереднього режиму. OTOH, я не читав, як налаштувати його на "IE8 режим".
Джон Сондерс

55
Власне, Джон Сандерс, ви помиляєтесь. Він використовує ie4, і вам потрібно змінити значення реєстру, щоб сказати йому використовувати поточне. Знайдіть "емуляцію функціонального режиму", і ви отримаєте відповіді на ур, нещодавно змінені, використовували для включення назви ключових слів, але вони змінили його, google ключові слова, які я згадав під "керуванням веб-браузерами", і ви знайдете статтю msdn.
Erx_VB.NExT.Coder

8
За замовчуванням розміщений WebBrowserелемент керування використовує емуляцію IE7, якщо інше не вказано з FEATURE_BROWSER_EMULATION. Це задокументовано тут: blogs.msdn.com/b/askie/archive/2009/03/23/…
noseratio

Відповіді:


171

Оформити замовлення CefSharp .Net прив'язки, проект, який я розпочав ще за той час, який із вдячністю підхопив громада і перетворився на щось чудове.

Проект охоплює Chromium Embedded Framework і був використаний у ряді великих проектів, серед яких клієнт Windows Rdio, Facebook Messenger для Windows та Github для Windows.

Він має керування браузером для WPF та Winforms та має безліч функцій та точок розширення. Базуючись на Chromium, він також блісто.

Візьміть його від NuGet: Install-Package CefSharp.WpfабоInstall-Package CefSharp.WinForms

Перегляньте приклади та дайте свої думки / відгуки / потяги-запити: https://github.com/cefsharp/CefSharp

Ліцензовано BSD


2
Я перейшов на CEfSharp із OWS, і можу твердити, що це дуже якісна та активна спільнота. Любіть це. github.com/cefsharp/CefSharp
Він

1
CefSharp чудовий, але слід пам’ятати, що бібліотеки дуже великі (20+ Мб востаннє я подивився), тому вони, можливо, не підходять для більш легкого проекту.
Skyl3lazer

1
@ANguyen так можна
chillitom

1
Дуже радий знати, що саме ви розпочали цей проект! Нещодавно я використовував cefsharp, проте я міг бачити, що розмір бібліотеки становить 80+ Мб, що є величезним, але необхідним для належного функціонування (Особливо плавного візуалізації) програми. Чи є спосіб зменшити це?
Адітія Бокаде

5
Це зламало мій проект. Усі посилання розбиті після встановлення нульового пакету winforms.
toddmo

84

Chrome використовує (вилку) Webkit, якщо ви не знали, що також використовується Safari. Ось кілька питань, які мають однаковий характер:

Один webkit не є чудовим, як говорить інша відповідь, одна версія більше не працює (код Google), а Mono - експериментальна. Було б добре, якби хтось доклав зусиль, щоб зробити гідну .NET обгортку для цього, але, здається, це не те, що хтось хоче робити - що дивно, враховуючи, що тепер у нього є підтримка HTML5 та стільки інших функцій, що IE (8 ) не вистачає двигуна.

Оновлення (2014 р.)

Існує новий подвійний ліцензійний проект, який дозволяє вбудовувати Chrome у свої .NET-програми, які називаються Awesomium . Поставляється з .NET api, але для візуалізації потрібно досить багато хаків (приклади малюють вікно браузера до буфера, малюють буфер як зображення та оновляють на таймері).

Я думаю, що це браузер, який використовує Origin у Battlefield 3.

Оновлення (2016)

Зараз існує DotnetBrowser , комерційна альтернатива Awesomium. Він заснований на Chromium.


Дякую. Я буду дивитись на обгортку Gecko. Одна річ, в оригінальній відповіді сказано: "Все, що вам потрібно зробити, це зареєструвати керування Mozilla ActiveX", і я подумав, що видання Express не можуть зареєструвати додаткові елементи керування. Невже я пропускаю щось очевидне?
Сільвердраг

4
@ Силі експрес-видання можуть зареєструвати стільки елементів управління, скільки вам потрібно. Те, що вони не робитимуть, дозволяє встановити плагіни для візуальної студії.
Джоел Куехорн

1
У мене був досить поганий досвід використання WebKit з C #, і, нарешті, мені довелося зупинитися на компоненті веб-браузера за замовчуванням, який постачається з .NET
Sumit Ghosh

1
Станом на цю дату вищезазначені проекти не підлягають заміні. Помилки компілятора надзвичайно + нестабільність. Awesomium, це повний і повний сміття.
Прем'єр-міністр Краанг

"Я думаю, що це браузер, який використовує Origin у Battlefield 3." Це неправильно. Я знаю це, тому що мені довелося змусити цей додаток використовувати, тобто на Windows 10, тому що, коли він затримався до краю, він не працював. Це був деякий час тому, можливо, вирішене питання.
Theyouthis

64

Я тестую альтернативи компоненту веб-браузера C # вже кілька днів, і ось мій список:

1. Використання новіших версій IE 8,9:

Компонент веб-браузера IE7 не IE8? Як це змінити?

Плюси:

  • Не потрібно багато роботи, щоб запустити його
  • деяка підтримка HTML5 / CSS3, якщо IE9, повна, якщо IE10

Мінуси:

  • Цільова машина повинна мати встановлену цільову версію IE, IE10 все ще переглядається на Win7

Для цього не потрібно багато роботи, і ви можете отримати підтримку HTML5 та CSS3, хоча в IE9 відсутні деякі найкращі функції CSS3 та HTML5. Але я впевнений, що ти міг би запустити IE10 так само. Проблема полягає в тому, що цільова система повинна мати встановлений IE10, і оскільки вона ще переглядається в Windows 7, я б проти цього.

2. OpenWebKitSharp

OpenWebKitSharp - це .net обгортка для двигуна webkit на основі проекту WebKit.NET 0.5. WebKit - це система верстки, яка використовується Chrome / Safari

Плюси:

  • Активно розвинений
  • Підтримка HTML5 / CSS3

Мінуси:

  • Багато функцій не реалізовано
  • Не підтримує x64 (додаток має бути створено для x86)

OpenWebKit дуже приємний, хоча багато функцій ще не реалізовані, у мене виникли декілька проблем із його використанням у візуальній студії, яка кидає тут нульові посилання на об'єкти, а потім у режимі дизайну виникають деякі проблеми з js. Усі, хто користується ним, майже одразу помітять, що js попередження нічого не робить. Такі події, як миші, маніпуляції ... тощо, не працюють, js перетягування - це баггі тощо.

У мене також були певні труднощі з його встановленням, оскільки для цього потрібна певна версія встановленого перерозподілюваного каналу VC, тому після винятку я подивився журнал подій, знайшов версію VC та встановив її.

3. GeckoFX

Плюси:

  • Працює на моно
  • Активно розвинений
  • Підтримка HTML5 / CSS3

Мінуси:

  • 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 див. Нижче) ̶

GeckoFX - це крос-платформене управління веб-сервером для вбудовування в додатки WinForms. Це можна використовувати з .NET в Windows і з моно в Linux. Gecko - це двигун верстки, який використовується Firefox.

Я наткнувся на декілька відомостей про те, що GeckoFX активно не розробляється, що не відповідає дійсності, звичайно, це завжди одна чи дві версії позаду Firefox, але це нормально, мене дуже вразили активність та сам контроль. Він робить все, що мені потрібно, але мені знадобився певний час, щоб запустити його, ось невеличкий підручник, щоб запустити його:

  1. Завантажте GeckoFx-Windows-16.0-0.2 , тут ви можете перевірити, чи доступні новіші GeckoFX
  2. Додайте посилання на два завантажені DLL
  3. Оскільки GeckoFX є обгорткою, вам потрібен XulRunner, перейдіть до списку версій, щоб побачити, який саме вам потрібен
  4. Тепер, коли ми знаємо, яка версія XulRunner нам потрібна, ми переходимо до версій Mozilla XulRunner , переходимо до папки версій -> runtimes -> xulrunner- (your_version) .en-US.win32.zip, в нашому випадку xulrunner-16.0.en- US.win32.zip
  5. Розпакуйте все і скопіюйте всі файли у свій коробку \ Налагодження (або випустіть, якщо ваш проект налаштовано на випуск)
  6. Перейдіть до дизайнера візуальної студії вашої форми, перейдіть до панелі інструментів, клацніть правою кнопкою миші всередині -> Виберіть елементи -> Огляд -> Знайдіть завантажений файл dll GeckoFX winforms -> ОК
  7. Тепер у вас повинен бути новий контроль GeckoWebBrowser

Якщо ви справді повинні користуватися Chrome, погляньте на цей продукт під назвою Awesomium , це безкоштовно для некомерційних проектів, але ліцензія становить кілька тисяч доларів для комерційних.


4
Дуже хороший опис того, як підключити та запустити GeckoFx. +1
Алекс Ессільфі

при створенні Geckofx-Winforms мені знадобилися 4 бібліотеки gtk # (atk-остро, gdk-остро, glib-остро і gtk-остро), тому мені довелося спочатку встановити Mono.
bernhardrusch

Ця відповідь вражаюча.
Майк Коул

Справді чудовий аналіз. Мені хотілося дізнатися, чи траплялось ви протестувати Awesomium із програмами C #. Чи маєте ви щось з цього приводу? Я ще не перевіряв його, але здається мені надійним після перегляду опікунської колегії, про яку вони згадували на своїй сторінці.
Абдул Рехман

2
@Wayne, якщо ви хочете зробити це правильно, вам слід створити папку у вашому проекті або окремий проект, куди ви б включили всі файли, файли gecko fx dlls та xul runner і встановили їх для копіювання завжди, то при кожному дії на збирання вони отримали б скопійовано у папку build / debug або опубліковано, якщо ви публікуєте з VS, є також метод Xpcom.Initialize, який вам слід зателефонувати, і ви зможете пройти його шлях до файлів xul runner, сподіваюся, що це допоможе
formatc

41

У мене була така ж проблема: WebBrowser використовував стару версію IE, з деяким googling я натрапив на наступний код, який робить зміни в реєстрі та змушує WebBrowser використовувати останню версію IE:

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

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

Ви можете використовувати його як:

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

1
Відмінно !! Дуже дякую!
Бен

1
Переведений на Python (працює над додатком IronPython), і він працював чудово. Дякую!
Девід

1
Це рятує моє життя! Спасибі
Neeraj Dubey

1
Це фантастично, але чи можливо скинути версію емуляції? Здається, що версію можна встановити лише один раз у програмі WinForms. Незважаючи на те, що можливо, здається, скидання ефекту полягає в тому, що після встановлення та скидання в реєстрі він не перечитується з новими значеннями реєстру в додатку WinForms.
циморг

1
@DarrenMB, наскільки я знаю, він використовує IE11
Ashkan Mobayen Khiabani

27

Ви можете використовувати реєстр, щоб встановити версію IE для контролю веб-браузера. Перейти до: HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION і додати "yourApplicationName.exe" зі значенням browser_emulation Щоб побачити значення browser_emulation см посилання: http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation


10
А якщо ви налагоджуєте у візуальній студії, вам, ймовірно, доведеться використовувати "yourApplicationName.vshost.exe"
newenglander

3
А якщо ви налагоджуєте у візуальній студії, ви, ймовірно, можете просто зняти прапорець "Увімкнути процес хостингу Visual Studio" на вкладці Налагодження властивостей проекту. Тоді ви можете використовувати своє ім'я exe без частини "vshost".
Данило Виголов

1
@golavietnam Ви можете, будь ласка, допомогти мені в цьому, я спробував ваші інструкції та користуючись інструкціями за посиланням, яке ви надали, але воно все ще не працює. Коли я відвідую WhatIsMyBrowser.com за допомогою керування веб-браузером, він говорить мені, що я використовую ie11 АЛЕ в режимі сумісності 7, і багато веб-сайтів відмовляються працювати і дають мені повідомлення "будь ласка, оновіть ваш браузер". Як я можу змусити контроль веб-браузера використовувати останню версію, тобто встановлену (тобто11) цей спосіб не працює, я пробував це сто разів.
jay_t55

Дякую, це спрацювало і врятувало мій день
Tấn Nguyên

18

Подивіться на контроль Mono.WebBrowser - він вбудовує в WinForms (без використання ActiveX) Gecko (як використовується Firefox) або WebKit (як використовується Safari).


16

Я знаю, що це не «заміна» управління WebBrowser, але у мене виникли жахливі проблеми з візуалізацією, показуючи сторінку, яка використовувала BootStrap 3+ для верстки тощо, і тоді я знайшов допис, який запропонував використовувати наступне. Мабуть, це специфічно для IE і каже йому використовувати останню варіацію, знайдену на клієнтській машині для візуалізації (тому він не використовуватиме IE7, як я вважаю, за замовчуванням)

Тому просто поставте:

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

десь у головній частині вашого документа.

Якщо, звичайно, це не ваш документ, то це, очевидно, не допоможе (хоча я особисто вважаю це діркою для безпеки, якщо ви читаєте сторінки, створені не самим через контроль веб-браузера - чому б не просто використовувати веб-браузер!)

Удачі.


Якщо ви хочете , щоб працювати на комп'ютері під керуванням IE7, не ставте його куди - то в <head>, поставити його в якості самого першого дитини <head>. Нам знадобився певний час, щоб розібратися в цьому.
Sylvain

Вибачте, що я мав на увазі, що IE8 не IE7 у своєму попередньому коментарі. Тож на IE8, якщо ви не ставите <meta>першим дочірнім пристроєм <head>, він працюватиме в режимі сумісності, а не в крайовому режимі.
Sylvain

Я використовував плагін webbrowser у програмі winform, і це була величезна допомога. Сторінка, на яку я потрапляв, використовувала jquery & angularjs, яка задихалась, бо думала, що браузер IE7, хоча у мене встановлений IE10.
Kywillis

Ця робота для мене! Ви також можете використовувати це для встановлення конкретної версії IE, наприклад: <meta http-equiv = "X-UA-Compatible" content = "IE = 10" /> і завжди браузер працює як 10 (звичайно, вам потрібно щоб встановити ту саму версію або вище
freedeveloper

Це ідеально підходить для моєї справи. Я хочу показати приємніші звіти у форматі html. Вміст CSS вже доступний. Це кращий підхід, ніж вбудований хром / фаєрфокс.
доктор Луффі

13

Погляньте на бібліотеку DotNetBrowser . Він забезпечує керування веб-переглядачами WPF та WinForms на основі Chromium, які досить легко вставити у додаток .NET. Він підтримує всі сучасні веб-стандарти, включаючи HTML5, CSS3 та JavaScript. Відображена сторінка виглядає точно так само, як у Google Chrome.

Бібліотека успадковує багатопроцесорну архітектуру Chromium - кожна веб-сторінка надається в окремому процесі Chromium, і додаток продовжить працювати навіть після збоїв плагіна або будь-якої іншої несподіваної помилки на веб-сторінці.

Ось деякі інші корисні функції, надані DotNetBrowser: можна слухати завантаження подій, обробляти мережеву діяльність, налаштовувати проксі, моделювати дії користувача, працювати з файлами cookie, отримувати доступ та змінювати DOM, слухати події DOM, дзвонити JavaScript з .NET і навпаки, використовувати веб-камеру та мікрофон на веб-сторінці, налаштовувати комунікацію на основі WebRTC тощо .

Перегляньте довідник API для отримання більш детальної інформації.

Фрагмент коду нижче демонструє, як створити BrowserView, вставити його у форму та завантажити 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");
        }
    }
}

Після запуску наведеного вище прикладу ви отримаєте такий результат:

введіть тут опис зображення

Бібліотека комерційна. Комерційні ліцензії включають пакети підтримки для різних розмірів команди. Можливо також придбати вихідний код бібліотеки.

Окрім власної сторінки, компонент доступний як NuGet, так і VSIX як пакунок Visual Studio Marketplace.


16
Остерігайтеся високої ціни цього товару
jjxtra

3
Це не з відкритим кодом, це ліцензія не дешевша.
Ashish-BeJovial

8

Я спробував декілька варіантів Webkit, але в моєму досвіді нічого не перемагає просування, яке має OpenWebkitSharp . Любіть це люблять. Оцінки HTML5 та CSS3 максимально наближені до Google Chrome. Дуже приємна API та модель подій. Якщо ви виявили, що API не реалізовані, швидше за все, тому що вони не реалізовані в Webkit. Все інше чудово працює.

OpenWebKitSharp - це .net обгортка для двигуна webkit на основі проекту WebKit.NET 0.5. Він додає більше функціональності версії 0.5 і надає більше методів, ніж збірка. OpenWebKitSharp підтримує як збір у Каїрі (0.5), так і нічний збір веб-файлів (за замовчуванням Nightly). У версії 1.5 Стабільна і більше включається нічна збірка і автоматично копіюється після побудови. У більш ранніх версіях це відбувається з побудовою в Каїрі. На даний момент OpenWebKitSharp працює з навігатором GTLite, швидким, стабільним та гнучким веб-браузером.


1
Дякую. Це виглядає як чудова знахідка!
Сільвердраг

Їх форуми також досить активні, і я отримав дуже швидкі відповіді на свої запитання. Тепер я використовую це для всіх моїх потреб управління WebBrowser
Vin

2
Так, це все, ви викликаєте ExecuteScript. Однак я перейшов на CefSharp і можу сказати вам, що мені подобається набагато краще, ніж OWS
Vin

1
Ще одна огидна безладність коду, яка нежиттєздатна для використання як ніколи.
Прем'єр-міністр Краанг

1
Остерігайтеся, веб-канік не може використовувати проксі, у них
виникають

7

ОНОВЛЕННЯ 2018 травня

Якщо ви орієнтуєте програму на запуск Windows 10, тепер ви можете вбудовувати браузер Edge у свій .net-додаток за допомогою інструментарію Windows Community Toolkit .

Приклад WPF:

1) Встановіть Nuget Package Windows Community Toolkit

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

2) Код 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) Код 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"));
  }
}

Приклад 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"));
  }
}

Для отримання додаткової інформації перейдіть за цим посиланням .


Я встановив Nuget Package, але він не працює. Ще ти.
Деніз

6

Спробуйте EO.WebBrowser . Він новий і базується на останній версії браузера Chrome. Найкраще з цього приводу полягає в тому, що він запаковує все всередині одного .NET dll, тому не тільки його дуже простий у використанні та розгортанні, але і той самий DLL підтримує і 32-бітні, і 64-бітні, тому що це .NET DLL.


9
Надалі, будь ласка, констатуйте, що це товар, що має ліцензію, і про те, чи є у вас будь-яка приналежність до продукту, див. Уникнення явної самореклами у FAQ.
Енді Браун

1
Після пошуку, як шалений ненависник РОКІВ ---- це "комерційне" управління - це буквально ТІЛЬКА робоча заміна заміни на IE, з якою мені не довелося обмінюватись і не викручувало жодного з моїх поточних браузерів налаштування. - якщо позначення, я НЕ пов'язаний з ЕО жодним чином або формою. Я злий, що всі ці інші рішення повністю s__t - цілком сміття і повна втрата часу.
Прем'єр-міністр Краанг

@SanuelJackson GeckoFx прекрасно працює в моїй компанії і не спричиняє жодних проблем із налаштуваннями браузера
Wayne

@Wayne - це приємно для вас. Жоден із цих відкритих проектів не є заміною, що вимагає значних змін, щоб вони працювали як керований код, особливо як контроль за формою випаду. Їм або не вистачає функціоналу, який пропонує управління IE та / або є повним s__t, оскільки вони постійно виходять з ладу або повільно - навіть не можуть перелічити всі проблеми тут. Можливо, в інше десятиліття, коли Інтернет більше не потребує веб-браузерів, можливо, тоді щось життєздатне буде в робочому стані.
Прем'єр-міністр Краанг

@SanuelJackson Хм, я б хотів, щоб те, що ви сказали, було правдою. На жаль, жодна з альтернатив (включаючи GeckoFX) не мала для мене жодних помилок зупинки. Я також хотів би, щоб я міг уникнути високої ціни для браузера Основні об'єкти. Але це був єдиний, який бездоганно працював на мене.
Майкен Роскілде

5

Я використовував GeckoFX, і він мені дуже добре допомагає. Він використовує двигун Firefox. Єдиний застереження, з яким я коли-небудь стикався з цим, - це те, що він випускає подію "DocumentLoaded" один раз до того, як документ буде фактично завантажений ... Я думаю, що він знімає один, коли завантажується HTML, а потім ще один, коли всі зображення та речі завантажуються. Я виправив це, просто ігноруючи перший, і він прекрасно працював досі.

Ви можете знайти його тут: https://bitbucket.org/geckofx/

Як і більшість гідних бібліотек, вона є відкритим кодом.


2
Всі компоненти на базі Firefox, які працюють, вкручуються разом із встановленням Firefox користувачами. На щастя, більшість із цих рішень взагалі не спрацьовують, і якщо пощастить, вони зберігають ваші налаштування Firefox в такті --- не так пощастило, ви втратите всі свої налаштування і все одно не матимете нічого кращого за IE як випадок.
Прем'єр-міністр Краанг

1
Посилання мертве і від старої збірки. bitbucket.org/geckofx має поточну версію
Wayne

@Sanual Jackson - Я використовував GeckoFx протягом багатьох років і жодного разу не виникав жодних проблем із встановленням Firefox користувача - включаючи власну. Ви просто здогадуєтесь?
PandaWood

3

MozNet - це .NET-контроль, який раніше базувався на більш-менш занедбаному контролі GeckoFX, але знаходиться в повній розробці і має набагато більше можливостей, ніж GeckoFX може потиснути палицю. Ви можете знайти його на веб-сайті Se7en Soft .


1
GeckoFX активно розробляється за адресою: bitbucket
Wayne

2

EO.BrowserControl - це швидко та просто. Він має двигун браузера Chrome і працює з будь-якою версією .NET

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

Примітка. Це комерційний ліцензований продукт, і я не маю на увазі його. Спробувавши різні інші речі, я вирішив обрати це.


2

Оновлення 2016:

Можна запропонувати 3 додаткові варіанти:

1. BrowseEmAll.Cef

Компонент .Net, який можна використовувати для інтеграції двигуна Chrome у Вашу програму .Net. На основі CefGlue, але трохи швидше оновлень до останньої версії Chrome. Також є комерційний варіант підтримки, який може бути корисним для деяких. Звичайно, сам компонент є відкритим кодом .

2. BrowseEmAll.Gecko

Ще один компонент .Net, який можна використовувати для інтеграції двигуна Firefox у вашу програму .Net. Це засновано на Geckofx, але на відміну від поточної версії Geckofx, це буде працювати з нормальною версією Firefox. Щоб використовувати Geckofx, вам потрібно буде самостійно створити Firefox. Знову доступна комерційна підтримка , але сам компонент є повністю відкритим кодом .

3. API APIEEEllAll Core

Потрібні всі різні веб-переглядачі у вашій програмі .Net? Який API API BrowEmAll ви можете інтегрувати в свою програму Chrome, Firefox, Webkit та Internet Explorer . Це комерційний продукт, хоча про це слід попередити.

(Повне розкриття інформації: я працюю в цій компанії, тому все, що я скажу, приймайте з зерном солі)


1

Якщо ви шукаєте приємного керування на основі IE - перегляньте: http://code.google.com/p/csexwb2/

Я використовував це у виробничих продуктах. Це досить добре і має хороші демонстрації, хоча, схоже, не підтримується так добре, як раніше.


1

Спочатку Geckofx та Webkit.net обіцяли, але вони не були в курсі Firefox та Chrome відповідно, коли Internet Explorer покращився, так і веб-браузер контролював, хоча він за замовчуванням поводиться як IE7 незалежно від того, яку версію IE ви мають, але це можна виправити, зайшовши в реєстр і змінивши його на IE9, що дозволяє HTML5.




0

Я спробував усі браузери, які там є. На жаль, єдиним, хто справді працював на мене за будь-яких обставин, був EO.Browser. Я б хотів, щоб я міг обрати безкоштовне рішення, але я закінчив роботу з EO.Browser. Це досить прицільно, але доглянуто.


0

Оновлення 2016:

Для мене єдиною надійною, підтримуваною альтернативою браузера IE є EO.WebBrowser. Я проводив дні і тиждень, випробовуючи інші. Усі вони мали деякі проблеми, які зупинили шоу для мене в якийсь момент.


1
Ну ... я бавився тиждень? намагаються змусити MS WebBrowser працювати - все безрезультатно. Не пробував жодного з інших =: - {крім EO.WebBrowser, який працював на мене вперше. Таким чином, його 20 хвилин з EO та успіхом порівняно з 5 днями з MS та повним та повним ганебним збоєм. Все, що я повинен зараз зробити, - це знайти $ 750, щоб придбати "успіх" !!!
Річард Хаммонд

0

Можливо, варто ознайомитися з комерційним продуктом, таким як WebKitX тут: https://www.webkitx.com

введіть тут опис зображення

Він використовує Chromium Embedded Framework і надає HTML5, WebGL, PDF та Flash на Windows XP, 7, 8, 10. Він також забезпечує 32-бітні, а також 64-бітні аромати управління.

Він пропонує доступ до DOM за допомогою COM-об'єктів, подібних до управління IE WebBrowser:

введіть тут опис зображення

Ви можете викликати JavaScript за назвою функції, передаючи скалярні аргументи (не використовуючи eval), а також має зворотні дзвінки JavaScript для Angular :

введіть тут опис зображення

Ви можете додати свої власні взаємодіючі COM-об’єкти до JavaScript:

введіть тут опис зображення

Він підтримує WebGL / WebAudio для ігор HTML5, які ви можете відключити для середовищ Citrix:

введіть тут опис зображення


Я використовую його у виробництві і довіряю йому повністю. Я спробував багато інших, і я застряг у цьому браузері. Чорти справді хороші та "особисті". Я не відчував себе наодинці, як з багатьма іншими. Дійсно хороший і стабільний продукт.
tmighty

ТАК вимагає відмови від відповідальності, тому Еліасу було б непогано зазначити, що він є центральним директором mobilefx, який є творцями WebkitX
hko
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.