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