Браузер от Mozilla в проекте на C#

Обычно свой браузер пишут, чтобы произвести автоматизацию или программное управление над некоторыми процессами. И как ни странно практически никто не хочет использовать встроенный компонент браузера той среды разработки, в которой создается проект. И здесь нет ничего удивительного. Поэтому разработчики вынуждены искать сторонние продукты для решения своих задач.

При поисках движка, выбор пал на движок от Mozilla Gecko. И так получилось, что документация и примеры по его использованию (практически только на англоязычных ресурсах) были под C# или под VB.Net. Я свой выбор остановил на C#.

Проект будет разрабатываться в среде разработки – Visual Studio 2010. Для работы нам понадобится скачать и установить SDK (xulrunner) от Mozilla. Xulrunner можно скачать здесь. Рекомендую скачать версию 1.9.0.0. Далее нам необходимо скачать и установить библиотеку Skybound.GeckoFX.bin, которая является оберткой для xulrunner под язык программирования C#. И в этом случае я также рекомендую скачать версию библиотеки – 1.9.0.0.

Дело в том, что в некоторых SDK, есть баги. Я сам недавно столкнулся, когда потребовалось написать новый проект. Часть исходного кода взял со старого проекта, а вот какой версии xulrunner в нем использовался, я забыл. Получив баг при работе проекта и прочитав пару статей (сначала подозрение падало на Visual Studio 2010) я узнал, что в некоторых версиях есть существенные недоработки. Поэтому демонстрация подключения браузера, будет происходить на проверенной версии платформы xulrunner и проверенной версии библиотеки-обертки.

Если вы скачали все необходимое, то можно переходить к созданию демонстрационного проекта. Но для начала необходимо разобраться с подключением xulrunner. Из полученного архива с xulrunner нас интересует каталог bin. Создадим на диске “С” к примеру, каталог “XPCOM” и в него скопируем все содержимое каталога bin из архива с нашим SDK. Затем, необходимо распаковать архив с библиотекой Skybound.GeckoFX.bin. Далее открываем Visual Studio и создаем стандартный проект под windows. На следующем шаге, необходимо открыть панель элементов. После чего кликаем по ее области, правой клавишей мыши. Перед вами должна появиться форма с выбором элементов панели управления.

Установка компонента Skybound.Gecko в Visual Studio 2010

Переходим на вкладку “Компоненты .NET Framework” и нажимаем кнопку “Обзор”. Перед нами откроется стандартное диалоговое окно для выбора файла. В нем, то и выбираем файл Skybound.Gecko.dll, который тоже находится в каталоге bin, каталога Skybound.GeckoFX.bin.v1.9.x.x и нажимаем кнопку “OK”. В панели элементов во вкладке “Общие” должен появиться компонент – GeckoWebBrowser. После чего, компонент GeckoWebBrowser, нужно перенести на форму.

Подключение компонента браузера Skybound.Gecko к форме в C#

Теперь необходимо произвести инициализацию компонента. Для начала необходимо добавить пространство имен Skybound.Gecko. Для этого в начале кода, вставим строку:

using Skybound.Gecko;

Затем в модуле формы, в конструкторе формы, добавим следующий код:

Xpcom.Initialize("С:\\XPCOM");

И еще одну строку кода необходимо добавить в обработчик события активации формы:

Mozilla.Navigate("http://google.ru", 0, "", null, "");

Все можно запустить проект. Если все заработало, то вы должны увидеть следующее:

Демонстрация проекта с подключенным браузером от Mozilla

В самом движке, есть все те возможности, которые присутствовали в Mozilla, а это около трех лет тому назад. Чего нельзя сказать о библиотеке-обертке. В этой версии, на основе которой построен демонстрационный проект, перечень возможностей очень и очень мал. Может быть и обратное: в xulrunner могут отсутствовать некоторые интерфейсы, реализация которых есть в установленной библиотеке-обертке. Посмотреть перечень доступных интерфейсов в xulrunner можно, если в каталоге с SDK открыть каталог bin\components. Там должны присутствовать файлы с расширением *.xpt. Это и есть библиотеки, которые получились в результате компиляции файлов с описанием интерфейсов. На данный момент движок Mozilla фундаментально изменен и существуют библиотеки-обертки, гораздо более новых версий (возможно там функциональных особенностей будет намного больше). Что я понимаю под ограничением функциональных возможностей?

Вот, к примеру, какие возможности отсутствуют в Skybound.Gecko v1.9.0.0:

  • удаление cookie;
  • возможность генерации событий от мыши;
  • и еще много всего;

Согласитесь, такие функциональные особенности списать со счетов мы не можем. Конечно, ничего страшного в этом нет. Это все при желании реализовывается самостоятельно, путем добавления необходимых интерфейсов и реализацией некоторых методов. Документации в наше время достаточно, но не факт что у кого то, будет проблема идентичная вашей. Но в любом случае при желании разобраться можно.

О том как можно модифицировать браузер, смотрите здесь.