Сравниваем браузерные движки - Блог ITVDN
ITVDN: курсы программирования
Видеокурсы по
программированию

Заказать звонок

Выбери свою IT специальность

Подписка

Заказать звонок

+38 099 757 27 82

Сравниваем браузерные движки

advertisement advertisement

Введение

В данной статье сравнивается четыре самых популярных браузерных движка для WinForms, а именно WebBrowser, Gecko, Awesomium и OpenWebKitSharp.

Исходники для работы:

 Браузеры


 

Небольшие сравнительные характеристики

WebBrowser

  • Стандартный браузерный движок .NET фреймворка.
  • Ядро – MSHTML + Active-X, включающий в себя COM IWebBrowser2 MSHTML IWebBrowser2.
  • Может использоваться для Winforms и WPF.

Gecko

  • Сторонний браузерный движок.
  • Ядро – XULRunner, используемый в браузере Firefox.
  • Имеет только поддержку Winforms.

Awesomium WebControl

  • Сторонний браузерный движок с настраиваемым внешним ядром.
  • Ядро - .NET, WebKit.
  • Поддерживается Mono, WPF и Winforms.

OpenWebKitSharp

  • Сторонний браузерный движок.
  • Ядро – WebKit, используемый в браузерах Safari и Chromium (Chrome).
  • Имеет только поддержку Winforms.
 

WebBrowser

Gecko

Awesomium

OpenWebKitSharp

Лицензия

Бесплатная

Бесплатная. Open-source: MPL 1.1/GPL 2.0/LGPL 2.1

Бесплатная, если Ваш проект имеет прибыть в $100 тис. (можно купить за $2900)

Бесплатная

Платформы

Winforms, WPF

Winforms

Winforms, WPF, Unity, Mono, SDL

Winforms

Тип процессора

Любой

?

X86

?

Скорость загрузки страницы

Низкая

Средняя

Высокая

Высокая

Требуемые размеры библиотеки DLL

0MB

22.4MB

40.5MB

64.6MB

Остановка GUI при загрузке страницы

Нет

Нет

Да

Да

Минимальная требуемая версия .NET

.NET 2.0 или более ранняя

.NET 2.0 или более ранняя

.NET 4.0

?

Объект, метод, свойство модели

-

WebBrowser-identical

Не WebBrowser-identical

WebBrowser-identical, но многие методы и свойства не работают

Использование контента DOM – set HTML

Да

Да

Да

Только с помощью JS

Использование контента DOM – get HTML

Да

Да

Да, но не работают с отключенным JS

Только с помощью JS

DOM – GetElementById

Да

Да

Только с помощью JS

?

DOM – GetElementsByClassName

Только с помощью JS

Да

Только с помощью JS

?

DOM – GetElementsByTagName

Да

Да

Только с помощью JS

?

Встраивание JavaScript

Да

Да

Да

Да

Отключение JavaScript

Нет

Да

Да

?

Настройка прокси-сервера

Нет

Да

Да

?

Встроенный визуальный редактор HTML

Да

?

Нет

Нет

Проверка HTML синтаксиса

Нет

?

Да

Да

Встроенный менеджер загрузок

?

?

?

Да

Использование WebBrowser

Встроенный визуальный редактор HTML

webBrowser1.Document.DomDocument.GetType().GetProperty("designMode").SetValue
    (webBrowser1.Document.DomDocument, "On", null);

Программная вставка HTML элемента 

// appends:

//

//  

//    src="http://dj9okeyxktdvd.cloudfront.net/App_Themes/CodeProject/Img/logo250x135.gif" />

//          

var mylink = webBrowser1.Document.CreateElement("a");

mylink.Id = "mylink";

mylink.SetAttribute("href""http://codeproject.com/");

var myimg = webBrowser1.Document.CreateElement("img");

myimg.Id = "myimg";

myimg.SetAttribute("src",

"http://dj9okeyxktdvd.cloudfront.net/App_Themes/CodeProject/Img/logo250x135.gif");

mylink.AppendChild(myimg);

webBrowser1.Document.Body.AppendChild(mylink);

Выбор DOM элемента – GetElementById 

var id = "mylink";

var el = webBrowser1.Document.GetElementById(id);

if (el != null) {

    MessageBox.Show("Element with id=\"" + id + "\" has innerHTML: " + el.InnerHtml);

}

else {

    MessageBox.Show("Element with id=\"" + id + "\" not found.");

}

Выбор DOM элемента – GetElementsByTagName

var tag = "img";

var elz = webBrowser1.Document.GetElementsByTagName(tag);

if (elz.Count > 0) {

    MessageBox.Show(elz.Count + " elements with tag <" + tag + "> found.");

}

else {

    MessageBox.Show("No elements with tag <" + tag + "> found.");

}

Использование контента DOM – set HTML 

webBrowser1.DocumentText = "<html><head><script>alert('check!');

script>head><body>lorembody>html>";

Встраивание JavaScript 

var head = webBrowser1.Document.GetElementsByTagName("head")[0];

var scriptEl = webBrowser1.Document.CreateElement("script");

scriptEl.SetAttribute("text""function sayHello() { alert('hello') }");

head.AppendChild(scriptEl);

webBrowser1.Document.InvokeScript("sayHello");

Использование Gecko 

Использование контента DOM – set HTML

geckoWebBrowser1.Document.DocumentElement.InnerHtml =

"<html><head>head><body>

<a class=\"link\">fa>body>html>";

 Выбор DOM элемента – GetElementsByClassName

(geckoWebBrowser1.Document.GetElementsByClassName("link")[0] as

    Skybound.Gecko.GeckoElement).InnerHtml = "tt";

Использование Awesomium WebControl 

Использование контента DOM – set HTML

webControl1.HTML = "<html><head><script>alert

('check!');script>head><body>lorembody>html>";

Использование контента DOM – get HTML 

var allhtml = webControl1.ExecuteJavascriptWithResult

    ("document.documentElement.outerHTML");

Встраивание JavaScript 

webControl1.ExecuteJavascript

("document.body.innerHTML += 'Hello, World!';");

Отключение JavaScript 

var ws = WebCore.CreateWebSession(new WebPreferences() { Javascript = true });

webControl1 = new Awesomium.Windows.Forms.WebControl() { WebSession = ws };

this.Controls.Add(webControl1);

Настройка прокси-сервера 

var ws = WebCore.CreateWebSession(new WebPreferences()

{ ProxyConfig = "255.255.255:8080" });

webControl1 = new Awesomium.Windows.Forms.WebControl() { WebSession = ws };

this.Controls.Add(webControl1);

Использование OpenWebKitSharp 

Использование контента DOM – set HTML

webKitBrowser1.GetScriptManager.EvaluateScript("document.body.innerHTML='';");

Выводы

В каждом движке есть свои + и –, с которыми можно столкнутся при разработке браузера. В любом случае, только Вам решать, какой из движков подойдет под Ваш стиль разработки.

Источник: http://www.codeproject.com/Tips/825526/Csharp-WebBrowser-vs-Gecko-vs-Awesomium-vs-OpenWeb?PageFlow=Fluid

КОММЕНТАРИИ И ОБСУЖДЕНИЯ
advertisement advertisement

Покупай подпискус доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

Стартовый
  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
59.99 $
Оформить подписку
Пакет Black Friday
  • Все видеокурсы на 15 месяцев
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин
  • Скачивание видео уроков
  • Возможность приостановки обучения
110.00 $
220.00 $
Оформить подписку
Акция
Базовый
  • Все видеокурсы на 1 год
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
89.99 $
Оформить подписку
Notification success