Введение
В данной статье сравнивается четыре самых популярных браузерных движка для 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='';");
Выводы
В каждом движке есть свои + и –, с которыми можно столкнутся при разработке браузера. В любом случае, только Вам решать, какой из движков подойдет под Ваш стиль разработки.
Статьи по схожей тематике