[C#]Классы для работы с Awesomium(google браузер) с примером реализации
Запись от Serx размещена 08.08.2015 в 15:06
Показов 30087
Комментарии 32
Метки c#
|
Всем здравствуйте. В этом блоге я размещу 2 класса, которые создал для работы с библиотекой Awesomium и большая часть блога будет посвящена примеру реализации данных классов. Awesomium - библиотека классов для работы с GoogleBrowser вместо не удобного webBrowser. Скорее всего я не знаю возможностей webBroser ![]() 1. Введение. 1.1 Что получится в итоге. рис. 1 Работающий проект. Примерная реализация. кнопки: 1 - Назад; 2 - Вперед; 3 - Обновить; 7 - Тестовая(подробнее далее); 8 - Тестовая(подробнее далее); другое: 4 - addressBox; 5 - Вкладки TabControl(a); 6 - TabControl и на каждой добавленной(кроме последней) tabPage(вкладке) webControl; 1.2 Плюсы и минусы awesomium. Возможно то, что я сейчас напишу будет ошибочно и не верно. Поскольку я не особо знаю, что писать в плюсы и минусы, постольку некоторые плюсы и минусы будут цитатами из некоторых статей с ресурсов интернета. А перед плюсами, хотелось бы предоставить данный отрывок с habrahabr.ru/post/170015/ В определенный момент мне стало некомфортно использовать стандартный контрол WebBrowser, предлагаемый Visual Studio. Причин было несколько: 1. Использовался IE-движок, что само по себе уже сильный аргумент. 2. Кривая работа с JS. 3. Отсутствие масштабирования. 4. Если запустить на машине, где стоит IE6, то все его «достоинства» переносятся на приложение. Далее плюсы и минусы. Плюсы: + Гугл Браузер вместо webBrowser. (Просто я не знаю, как описать, то что это здорово )+ Awesomium - это полноценный браузер. В плане полноценности он представляет, что он может предоставлять полную работоспособность сайта в отличии от webBrowser(как говорил, возможно я не знаю возможностей webBrowser) + Awesomium можно интегрировать в приложение практически любого типа (к примеру интеграция в 3D игры на базе Unity3D), он обладает широким набором возможностей для разработчика. (взято с habrahabr.ru) + Так же пишут, что с awesomium удобно работать в плане кодинга по сравнению с подобными наработками других проектов браузеров(xulrunner, webKit, CefSharp, gecko и другие). Плюсов на самом деле больше, чем я написал. ![]() Минусы: - Утечка памяти(частично решено кодом) - При большом размере webControl(а)(webBrowser - googleBrowser), при загрузки "крупных сайтов" приложение начинает виснуть. Возможно их больше, чем я написал. 1.3 Перед созданием проекта. Первое, что нам понадобится - установить Awesomium библиотеку. Скачать ее можно с официального сайта. Версия 1.7.5.1 на 8 августа 2015 год. После установки, в конструкторе формы, на панели элементов появятся контролы, выделенные на скриншоте рис. 2 Панель элементов с новыми контролами, после установки awesomium. 2.Сбор проекта. Создаем новый проект приложение Windows Forms. 2.1 Что расположить на форме. рис. 3 Конструктор формы проекта. Из панели элементов перетаскиваем на форму и др. действие: • Button - 5 шт. смотрим по рис. 3 •• 1 - кнопка назад; 2 - кнопка вперед; 3 - кнопка обновить; 7 - тестовая кнопка заполнения полей, нажатия кнопок и выбора значений из comboBox на сайте; 8 - тестовая кнопка очищение оперативной памяти webControla, на выбранной странице. На скриншоте картинки вместо кнопок. Можно добавить картинку, на кнопку, через свойство кнопки Image. • AddressBox - 1 шт. смотрим по рис. 3 •• 4 - addressBox - вводим(когда проект готов) в него ссылку, например можно cyberforum.ru и если addressBox(у) указан webControl(в данных классах, указывается при добавление вкладки с webControl(ом)), то переходит по ссылке, которую указали ![]() • TabControl - 1 шт. смотрим по рис. 3 •• 6 - TabControl - на нем и будут("программно") создаваться вкладки с webControl(ом). • Удаляем вкладки с TabControl(а). Будем создавать их "кодом" смотрим по рис. 3 •• 5 - После удаления вкладок. Как удалить: (Делаем это в конструкторе формы Form1.cs[Конструктор]*) 1. Находим в свойствах TabControl(a), свойство TabPages | (Коллекция) и выбираем его. 2. Нажимаем на появившуюся кнопку "...". 3. Нажимаем Удалить и еще раз Удалить(так мы удалили вкладки из списка). 4. Нажимаем Ок. • WebSessionProvider - 1 шт. смотрим по рис. 3 •• 9 - WebSessionProvider - с его помощью, мы будем сохранять сессии, куки.(возможно я, что то не правильно говорю) В общем, если мы вошли в свой аккаунт на любом сайте(в данном приложении), мы будем авторизированны, на любой вкладке, на этом сайте.(поскольку, "кодом" будем задавать webControl(у), webSessionProvider) • ContextMenuStrip - 1 шт. смотрим по рис. 3 •• 10 - ContextMenuStrip - с помощью него мы будем закрывать вкладку. В появившейся строке пишем закрыть вкладку. 2.2 Создаем/задаем методы для событий контролов и др. • Для формы: Form_Load. В Form1.cs[Конструктор]* дважды кликаем по форме. • Для всех кнопок: button_Click. В Form1.cs[Конструктор]* дважды кликаем по всем кнопкам(по очереди). • Для tabControl: tabControl_MouseDown и tabControl_Selecting. Выбираем tabControl, созданный на форме. И в событиях(там где свойства, есть иконка с молнией) дважды кликаем по Selecting и MouseDown. Скриншот для тех кто совсем в танке ![]() Кликните здесь для просмотра всего текста
• Для contextMenuStrip: закрытьВкладкуToolStripMenuItem_Click. Выбираем contextMenuStrip и дважды кликаем по строке закрыть вкладку(если не записали в эту строку, то записываем). • Для webSessionProvider в свойство DataPath задаем путь, куда будет сохранять куки/сессии. • Для tabControl в свойство ContextMenuStrip задаем contextMenuStrip. 2.3 Добавляем классы в проект и ссылку на сборку. Добавляем ссылку на accessibility. В обозреватели решений, щелкаем правой кнопкой на references -> Добавить ссылку -> и ставим галочку на accessibility. Добавляем классы(NavigationOnWebControl, TabControlAwesomium, ProgrammMethods) в проект, так же можно скопировать и Form1. То есть проделав(правильно - в точности, как описано) все предыдущие пункты можно просто скопировать в проект, данные классы, и проект будет работать. При добавлении классов меняем namespace AwesomiumProgramm на название Вашей программы. Класс NavigationOnWebControl
Кликните здесь для просмотра всего текста
Класс TabControlAwesomium
Кликните здесь для просмотра всего текста
Класс ProgrammMethods
Кликните здесь для просмотра всего текста
Класс Form1
Кликните здесь для просмотра всего текста
3. Заключение. Возможно я где то, что то не правильно назвал, описал или еще чего либо сделал сделал не правильно. Но надеюсь Вы меня простите ![]() Всем спасибо за внимание. Чтобы найти, что то в гугле, ему надо помочь и тогда гугл поможет Вам!
![]() | ||||||||||||||||||||
Метки c#
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 32
Комментарии
-
Запись от Avazart размещена 08.08.2015 в 16:47
-
Да. Забыл подписать, что C#) СпасибоЗапись от Serx размещена 08.08.2015 в 16:51
-
Я об авесомиуме узнал некоторое время назад и даже установил его, но воспользоваться как-то руки не доходили, впервые попробовал только вчера, так что мало что могу сказать об этом. Но, увидев статью о нем на форуме, надеялся пополнить знания. Например мне жутко интересно было узнать, чем он лучше стандартного WebBrowser, но из этой статьи я узнал, что лучше он тем, что это гуглбраузер вместо WebBrowser. Других плюсов нет что ли? Из минусов я отметил бы то, что вчера малипусенький проектик собрал (с браузером и одной кнопкой), так вот папка дебаг весила более 40мб. Вот таскать со своей программой такую туеву хучу чужого кода ради того, что это "гуглбраузер вместо WebBrowser" - по-моему какой-то не очень убедительный аргумент. Хотелось бы все-таки больше узнать о преимуществах данного выбора.Запись от diadiavova размещена 08.08.2015 в 17:24
-
Так зачем папку Debug таскать?(может Вам конечно надо, но для работоспособности хватает и самого .exe файла)
Из плюсов, сам только месяц знаком с awesomium, конечно хотелось бы написать больше, если знал бы, что писать. А так спасибо за комментарий
Запись от Serx размещена 08.08.2015 в 17:44
-
Запись от diadiavova размещена 08.08.2015 в 17:50
-
Понял) Спасибо за знание - не знал, что авесомиум должен быть установлен и на другом компьютере.
Сообщение от diadiavova

Запись от Serx размещена 08.08.2015 в 17:57
-
Ну я этого не говорил. Просто в меню "Сборка" выбери публикацию проекта и посмотри что будет в папке "publish". Вот все это придется распространять вместе с программой. То, что ты устанавливаешь у себя - это SDK и там много такого, что нужно только разработчику, но распространяемый пакет тоже весит немало.
Сообщение от Serx
Запись от diadiavova размещена 08.08.2015 в 18:33
-
В общем Вы правы. И постараюсь в понедельник найти больше о плюсах и минусах и дополню блог.
Сообщение от diadiavova
Запись от Serx размещена 08.08.2015 в 20:00
-
В общем дополнил немного плюсы и минусы и как будет появляться больше информации, блог будет пополнятся. Так же если читатели желают, чем либо дополнить блог, то пишите свое дополнение в комментарии. Всем спасибо.Запись от Serx размещена 10.08.2015 в 08:58
-
Можно ссылочку а проект, не хочу сам форму накидывать.Запись от fan92rus размещена 22.01.2017 в 20:41
-
40M это нормально для стороннего браузера.
Сообщение от diadiavova
(TChromium в VCL и WebKit в Qt весят больше)
Лучше чем IE который может быть разных версий на компе и вести себя совсем по разному.
У меня уже было такое. У меня работает у заказчика- нет из-за разных версий.
Обработчики событий по разному вызывались.
(Правда я использовал VCL аналог - обвертки на IE)Запись от Avazart размещена 22.01.2017 в 22:43
-
Для стороннего браузера - конечно нормально. Другой вопрос: нормально ли это для приложения, которое не использует каких-то специфических особенностей этого браузера и могло бы вполне обойтись штатным браузером? А уж если само приложение "весит" 1-2 Мб, то вопрос становится вдвойне актуальным. Кроме того, скорей всего это будет не единственная сторонняя библиотека в проекте, а если подобным образом относиться к данному вопросу и добавлять сторонние либо по каждому поводу, то общий объем всего этого "добра" может оказать весьма внушительным.
Сообщение от Avazart
С версиями ИЕ проблема может и актуальна, но далеко не всегда критична. Ну в самом деле, на скольких машинах в данный момент работает скажем шестая версия или даже восьмая? А в скольких таких случаях это происходит из-за того, что по каким-то причинам более позднюю версию невозможно установить? Я уже не говорю о том, что во время отладки приложения можно манипулировать с режимами совместимости и увидеть, как это будет работать в разных версиях.
В общем и целом: авесомиум - неплохая штука, но я как-то не видел убойных аргументов в пользу того, чтобы использовать ее везде, где нужен браузер. Я скорее наоборот, сначала рассмотриваю возможность использования штатного браузера и как правило этого мне хватает.Запись от diadiavova размещена 02.02.2017 в 13:18
-
Я не считаю что ~50 M и тем более 1-2М это проблема в наше время особенно если оно выполняет поставленную задачу.
Не знаю мой заказчик возбухал... типа а что я теперь на все 20 машинах должен обновлять IE (там стояла старая версия, если не ошибаюсь 8 а нужна была 11)
Кроме того с другим заказчиком я сильно намаялся пока обнаружил в чем проблема и почему оно у меня работает, а у него нет при чем не выдает внятных ошибок.Запись от Avazart размещена 02.02.2017 в 20:05
-
А если поставленную задачу можно выполнить и без этого? И что значит в наше время? А если программу надо запускать на планшете? Про 1-2 Мб я говорил о твоей программе, когда твоя программа весит столько, а для того, чтобы она могла работать надо еще таскать с ней несколько либ, общий объем которых "утяжеляет" программу в несколько десятков раз.
Сообщение от Avazart
Ну я не спорю, что заказчик всегда прав, независимо от того, насколько неадекватны его требования, поскольку он платит. Я ведь не об этом говорю, а о ситуации, когда выбор от тебя зависит.
Сообщение от Avazart
Подобные проблемы могут возникнуть с чем угодно и авесомиум от этого тоже не застрахован.
Сообщение от Avazart
Кстати, если бы у меня спросили чем штатный браузер лучше, то я, пожалуй, несколько уникальных возможностей все-таки смог бы привести. А вот апологеты всяких там авесомиумов, как правило приводят либо какие-то частные случаи типа "заказчик ни в какую не хочет ставить новый ИЕ", либо вообще отвечают общими фразами типа "он дает возможность использовать вебкит, что уже само по себе хорошо". Нельзя сказать, что у авесомиума вообще нет преимуществ, в общем и целом все не настолько радужно как может показаться на первый взгляд. Кстати, на форуме неоднократно видел такую ситуацию: человек спрашивает как что-то сделать в браузере, а отвечающий сам не знает и по этой причине советует авесомиум, поскольку там все на поверхности лежит.Запись от diadiavova размещена 03.02.2017 в 15:12
-
По сравнениею с весом самого фреймворка NET это копейки....
Ну так есть причина, а именно разноверсица...
Я не знаю как в С#, но обычно у сторонних браузеров действительно более сносный интерфейс чем всякие обвертки над IE.
Ну и что припоминается это куки, при использовании "штатного" приходится делить куки с IE.Запись от Avazart размещена 03.02.2017 в 16:36
-
При чем тут вес фреймворка? От фреймворка никуда не денешься.
Сообщение от Avazart
Ситуация, когда кто-то категорически не хочет устанавливать актуальную версию ИЕ, если и не уникальна, то по крайней мере достаточно редка. Все-таки браузерный движок - неотъемлемая часть системы и его обновление - вещь нужная, даже если ИЕ не используется. А насчет "разноверсицы", то при наличии последней версии ИЕ версиями можно управлять. Причем можно установить в реестре режим совместимости по умолчанию, но и на самой странице можно указывать версию, что позволяет разные страницы отображать в режиме совместимости с разными версиями. Так что поддержка версий в триденте более гибкая.
Сообщение от Avazart
Опять-таки интерфейс браузера ни при чем, ведь речь идет о контроле в чистом виде, так что интрефейс ты пишешь сам.
Сообщение от Avazart
Что до куков, то ту согласен, если есть в этом необходимость, то это аргумент.
Пара слов о преимуществах браузера, который "искаропки".
Прямой доступ к ком-интерфейсам модели DOM, то есть можно запросить набор элементов, выполнить любые манипуляции с ними и результат выполнения будет отображен в браузере. Насколько я знаю, максимум что в этом смысле предлагает авесомиум - это набор прокси-объектов, с которых можно получить данные об элементе.
Можно передать самописный объект браузеру и обращаться к нему со страницы.
Гибкая настройка параметров безопасности (можно, например, разрешить кроссдоменные аякс-запросы и куча чего еще).
Можно использовать ActiveX-объекты на странице.
Понятно, что последние два вряд ли актуальны, если браузер используется для создания какого-нибудь браузерного бота, где важно, чтобы все работало стандартненько. Но если браузер используется как алтернативная гуй-платформа то все это может пригодиться.Запись от diadiavova размещена 03.02.2017 в 17:39
-
Запись от Avazart размещена 03.02.2017 в 20:23
-
Я думал, что с дотнетчиком разговариваю. Но в любом случае, фреймворк удалить невозможно, поскольку он - часть операционной системы. Ну и соответственно при развертывании приложения фреймворк вместе с ним надо поставлять только для старой винды (на хр его еще не было, а дальше там может версия другая быть, поскольку в систему входит версия фреймворка, которая была актуальной на момент выхода самой системы, более позднюю надо устанавливать).
Сообщение от Avazart
А где я сказал, что ты это сказал? )) Просто сам браузер можно использовать по-разному. Можно работать с какими-то документами из интернета и это только один вариант использования. Можно просматривать в нем документы, сформированные приложением. А можно реализовать в нем какой-то функционал, который будет использоваться в приложении и тут тоже есть и варианты и различные подходы к реализации и различные причины для использования такого подхода.
Сообщение от Avazart
В авесомиуме так и есть, а в браузере от майкрософт есть разные возможности.
Сообщение от Avazart
Запись от diadiavova размещена 06.02.2017 в 11:52
-
Хз, но в Win7-ке вроде можно....
В любом случае работы программы нужно определенное "окружение" всегда есть какие либо зависимости и <100 M
это вполне нормальный размер для нормальной программы(хелоуворлды не в счет)
Какой? Используя IE вы конечно делаете программу легче, но с тем более зависимой от настроек системы(IE).Запись от Avazart размещена 06.02.2017 в 17:46
-
Начиная с висты фреймворк стал частью системы. Ну и окружение окружением, но есть разница между окружением, которое является частью системы и тем, что надо "таскать с собой". Ну и потом, взять какую-нибудь яву, вроде ставить надо и все такое, но ее один раз поставил и все приложения требующие ее (а таких немало) будут работать, а здесь речь о либе, которая будет лежать в папке твоего приложения и использоваться только им.
Сообщение от Avazart
Ну например, в винформах отсутствуют всплывающие события, так что можно использовать браузер там, где они нужны. Или в случае приложений с расширяемой архитектурой, совсем неплохо авторам плагинов предложить вомзожность писать их с использованием клиентских веб-технологий, которые и проще и знакомы в той или иной мере практически всем программистам.
Сообщение от Avazart
Во-первых для настройки ИЕ далеко не все влияют на контрол, есть масса настроек актуальных только для контрола. Во-вторых, тот же режим совместимости можно указать прямо на странице, не затрагивая таким образом настройки, влияющие на что-то другое.
Сообщение от Avazart
Запись от diadiavova размещена 07.02.2017 в 11:24


)

