[C#]Классы для работы с Awesomium(google браузер) с примером реализации
Запись от Serx размещена 08.08.2015 в 15:06
Показов 30108
Комментарии 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
Комментарии
-
Ну фреймворк то нужно "такскать за собой" из-за разновресицы.
Это завит ровно от того что какие приложения использует пользователь. Если NET программы нет на компе то NET тоже будет лежать грузом.
Вроде же согласились насчет куки, а это важно. Это все морока, морока для пользователя до настраивать IE.
Что значит "всплывающие события" подсказки в смысле? Так это проще будет делать программно.
Я вижу одно применение отображение простого html в окне программы для неосновного функционала, например для справки/документации.
Для отображения же сайтов IE очень плохо подходит ибо отображает криво, js- ложатся напрочь.Запись от Avazart размещена 07.02.2017 в 13:29
-
Не совсем так. Например версии 3.0 и 3.5 являются надстройками для версии 2.0, так что установка 3.5 гарантриует запуск приложений под более ранние версии. С версиями 4.хх немного другая тема, они уже запускаются под новой версией CLR, поэтому если на компе установлена только такая версия, то "двойка" и "тройки" запускаться не будут. Я не знаю точно, есть ли на восьмой и десятой винде предыдущие версии фреймворка, поэтому не могу сказать будет ли там "искаропки" запускаться приложение написанное, скажем, под второй фреймворк (думаю, что все там есть, но утверждать не буду, у меня всегда все есть, поскольку устанавливается все со студией). Но на самом деле это вообще не проблема.
Сообщение от Avazart
Огромное количество программ его используют, чего не скажешь об авесомиуме. Но даже если бы куча программ использовала авесомиум, то свой экземпляр этой либы пришлось бы ставить для каждой из них.
Сообщение от Avazart
Я согласился с тем, что в тех ситуациях, когда это важно - действительно лучше выбрать что-то другое. Но это не всегда имеет значение. У авесомиума есть другие полезности, отсустствующие в иешном браузере. Например возможность получить изображение страницы или вообще контролировать процесс прорисовки. В мсхтмл есть интрефейс для рендеринга элементов страницы, но он уже давно перестал работать. Есть частные случаи, когда использование того же авесомиума предпочтительнее. Но говорить, что он во всем лучше я бы не стал.
Сообщение от Avazart
События, которые можно обрабатывать не только в элементах, вызвавших эти события, но и в контейнерах этих элементов. Например события ячеек таблицы можно обрабатывать в самой таблице.
Сообщение от Avazart
Ну с этим любой браузер справится "на ура". Даже последние версии не понадобятся. Если дело только в этом, то о чем вообще спор?
Сообщение от Avazart
По умолчанию он работает в режиме совместимости с IE7. Эта проблема легко решается внесением в реестр нужной версии, эта запись будет актуальна для конкретного приложения. Последние верии ИЕ поддерживают веб-стандарты и все нормально отображают.
Сообщение от Avazart
Запись от diadiavova размещена 07.02.2017 в 14:05
-
https://www.cyberforum.ru/orde... 12745.html
А если я вообще NET программы не использую, я об этом говорил...
Это не есть так, ничто не мешает сделать инсталятор и использовать авесомиум или другой "пакет" совместно несколькими программами. Для этого лишь необходимо соглашение о том где его искать.
Такая ситуация вполне может быть если я пишу не одну программу, а пакет программ.
Запись в реест сама по себе проблема. И что вы там говорили про не зависимость настроек от IE ?
Кстати я не думал что это проблема как Delphi есть в C#.Запись от Avazart размещена 07.02.2017 в 14:14
-
Глянул мельком. Если правильно понял, то проблему можно решить, просто скомпилировав приложение под разные фреймворки и распространять две версии. Вот если оно написано под "четверку", то на более ранних уже не запустишь, надо ставить. Но это не такая распространенная ситуация, поскольку подразумевает, что надо заставить работать программу на старой винде. А человек, пользующийся старой виндой и принципиально не желающий ставить на нее новый фреймворк - ну не такой ведь распространенный случай.
Сообщение от Avazart
Ну тогда фреймворк тебе не нужен и ставить его незачем. А в чем вопрос-то?))
Сообщение от Avazart
Да, но как правило программы эти пишут разные разработчики и каждый впихнет в дистрибутив свой экземпляр.
Сообщение от Avazart
Про независимость от ИЕ я говорил, что есть настройки, которые устанавливаются отдельно для контрола и отдельно для программы. В данном случае речь именно о такой настройке. Мало того, режим совместимости для контрола устанавливается только для конкретного приложения, то есть в реестр вносится имя приложения и соответствующая версия
Сообщение от Avazart
Internet Feature Controls (B..C) (Internet Explorer)
Что до дельфи, то это тут вообще ни при чем. Это системная функция и работает она именно так, независимо от того, в каком языке/платформе используется.Запись от diadiavova размещена 07.02.2017 в 14:31
-
Запись от Avazart размещена 07.02.2017 в 14:38
-
Запись от diadiavova размещена 07.02.2017 в 14:40
-
Запись от Avazart размещена 07.02.2017 в 14:58
-
Запись от diadiavova размещена 07.02.2017 в 15:09
-
Запись от Avazart размещена 07.02.2017 в 15:37
-
Запись от 1337trix размещена 26.04.2017 в 16:49
-
Запись от Avazart размещена 26.04.2017 в 19:18
-
Есть ли документация по отправке запросов, с помощью awesomium? Не знаю. Возможно есть где то здесь(документация awesomium) а возможно и нет там.
Сообщение от 1337trix
________________________________________ ________________________________________ ________________________________________ _________
А если вам например нужно нажать на кнопку и выполнить отправление get или post запроса?
То можно попробовать с помощью JavaScript отправить запрос. А выполнить JavaScript с помощью функции
C# 1
webControl.ExecuteJavascript(string JavaScriptCode); // пример в данном блоге, в "Класс NavigationOnWebControl" строка 100)
Если не знаете JS, то поищите/спросите в разделе форума https://www.cyberforum.ru/javascript/
как выполнить запрос с помощью js.
________________________________________ ________________________________________ ________________________________________ _________
А если это не то, что вам нужно, то задайте более уточняющий вопрос. Или ответь на вопрос: "Что именно вы хотите найти в документации?"Запись от Serx размещена 27.04.2017 в 11:28


)

