Форум программистов, компьютерный форум, киберфорум
Serx
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

[C#]Классы для работы с Awesomium(google браузер) с примером реализации

Запись от Serx размещена 08.08.2015 в 15:06
Показов 30087 Комментарии 32
Метки c#

Всем здравствуйте. В этом блоге я размещу 2 класса, которые создал для работы с библиотекой Awesomium и большая часть блога будет посвящена примеру реализации данных классов.
Awesomium - библиотека классов для работы с GoogleBrowser вместо не удобного webBrowser. Скорее всего я не знаю возможностей webBroser

1. Введение.

1.1 Что получится в итоге.


Нажмите на изображение для увеличения
Название: AwesomiumBrowser.PNG
Просмотров: 918
Размер:	126.1 Кб
ID:	3244
рис. 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 год.
После установки, в конструкторе формы, на панели элементов появятся контролы, выделенные на скриншоте

Название: Панель элементов.PNG
Просмотров: 4147

Размер: 10.7 Кб
рис. 2 Панель элементов с новыми контролами, после установки awesomium.

2.Сбор проекта.


Создаем новый проект приложение Windows Forms.

2.1 Что расположить на форме.


Нажмите на изображение для увеличения
Название: Конструктор AwesomiumBr.PNG
Просмотров: 1064
Размер:	22.1 Кб
ID:	3246
рис. 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. Скриншот для тех кто совсем в танке
Кликните здесь для просмотра всего текста
Название: СобытияТабКонтрол.jpg
Просмотров: 3509

Размер: 108.7 Кб

• Для contextMenuStrip: закрытьВкладкуToolStripMenuItem_Click. Выбираем contextMenuStrip и дважды кликаем по строке закрыть вкладку(если не записали в эту строку, то записываем).
• Для webSessionProvider в свойство DataPath задаем путь, куда будет сохранять куки/сессии.
• Для tabControl в свойство ContextMenuStrip задаем contextMenuStrip.

2.3 Добавляем классы в проект и ссылку на сборку.


Добавляем ссылку на accessibility. В обозреватели решений, щелкаем правой кнопкой на references -> Добавить ссылку -> и ставим галочку на accessibility.

Добавляем классы(NavigationOnWebControl, TabControlAwesomium, ProgrammMethods) в проект, так же можно скопировать и Form1. То есть проделав(правильно - в точности, как описано) все предыдущие пункты можно просто скопировать в проект, данные классы, и проект будет работать. При добавлении классов меняем namespace AwesomiumProgramm на название Вашей программы.


Класс NavigationOnWebControl
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using Awesomium.Windows.Forms;
using System.Collections.Generic;
 
namespace AwesomiumProgramm
{
 
    class NavigationOnWebControl
    {
 
        Dictionary<GetElementBy, string> Elements;
 
 
        /// <summary>
        /// Инициализирует новый экземпляр класса NavigationOnWebControl
        /// </summary>
        public NavigationOnWebControl()
        {
            Elements = new Dictionary<GetElementBy, string>();
            AddElements();
        }
 
        /// <summary>
        /// Атрибут поиска в теге
        /// </summary>
        public enum GetElementBy
        {
            /// <summary>
            /// Поиск по ClassName
            /// </summary>
            ClassName = 0,
            /// <summary>
            /// Поиск по Id
            /// </summary>
            Id = 1,
            /// <summary>
            /// Поиск по Name
            /// </summary>
            Name = 2
        }
 
 
        /// <summary>
        /// Добавляет элементы в коллекцию
        /// </summary>
        private void AddElements()
        {
            Elements.Add(GetElementBy.ClassName, "getElementsByClassName");
            Elements.Add(GetElementBy.Id, "getElementById");
            Elements.Add(GetElementBy.Name, "getElementsByName");
        }
 
        /// <summary>
        /// Нажимает кнопку на сайте
        /// </summary>
        /// <param name="webControl">webControl на котором будет выполнять метод</param>
        /// <param name="getElementBy">Атрибут поиска в теге</param>
        /// <param name="ElementValue">Значение атрибута, по которому будет происходить поиск</param>
        public void PressButton(WebControl webControl, GetElementBy getElementBy, string ElementValue)
        {
            webControl.ExecuteJavascript("document." + Elements[getElementBy] + "('" + ElementValue + "')[0].click()");
        }
 
        /// <summary>
        /// Обновит страницу на webControl
        /// </summary>
        /// <param name="webControl">webControl на котором будет выполнять метод</param>
        public void RefreshPage(WebControl webControl)
        {
            webControl.Reload(false);
        }
        
        /// <summary>
        /// Вернет индекс nameValueComboBox
        /// </summary>
        /// <param name="namesValueComboBox">Имена значений comboBox(по порядку, как на сайте)</param> // Так же можно найти скрипт на считывание этих значений
        /// <param name="nameValueComboBox">Имя значения, по которому будет сравнивать с массивом имен значений comboBox, для получения индекса значения в comboBox</param>
        /// <returns>Индекс, соответствующий значению nameValueComboBox из массива значений namesValueComboBox</returns>
        public int RetIndex(string[] namesValueComboBox, string nameValueComboBox)
        {
 
            for (int i = 0; i < namesValueComboBox.Length; i++)
            {
                if (nameValueComboBox == namesValueComboBox[i])
                {
                    return i;
                }
            }
 
            return -1;
        }
 
        /// <summary>
        /// Выбирает значение из comboBox на сайте
        /// </summary>
        /// <param name="webControl">webControl на котором будет выполнять метод</param>
        /// <param name="getElementBy">Атрибут поиска в теге</param>
        /// <param name="nuberComboBoxValue">Индекс, по которому выберет значение из comboBox</param>
        public void SelectComboBoxValue(WebControl webControl, GetElementBy getElementBy, string ElementValue, int nuberComboBoxValue)
        {
            webControl.ExecuteJavascript("document." + Elements[getElementBy] + "('" + ElementValue + "').selectedIndex = " + nuberComboBoxValue);
        }
 
        /// <summary>
        /// Записывает в поле на сайта
        /// </summary>
        /// <param name="webControl">webControl на котором будет выполнять метод</param>
        /// <param name="getElementBy">Атрибут поиска в теге</param>
        /// <param name="AttributeValue">Значение атрибута, по которому происходит поиск элемента</param>
        /// <param name="value">Значение, которое запишет в поле на сайте</param>
        public void WriteInField(WebControl webControl, GetElementBy getElementBy, string AttributeValue, string value)
        {
            webControl.ExecuteJavascript("document." + Elements[getElementBy] + "('" + AttributeValue + "')[0].value = " + "'" + value + "'");
        }
 
        
    }
}


Класс TabControlAwesomium
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
using Awesomium.Core;
using Awesomium.Windows.Forms;
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace AwesomiumProgramm
{
    class TabControlAwesomium
    {
        private Point lastClickPos;
        private TabControl tabControl;
        private WebSessionProvider webSessionProvider;
 
        /// <summary>
        /// Инициализирует новый экземпляр класса TabControlAwesomium
        /// </summary>
        /// <param name="tabControl">Объект tabControl, с которым будет работать класс</param>
        /// <param name="webSessionProvider">Объект webSessionProvider,  с которым будет работать класс</param>
        public TabControlAwesomium(TabControl tabControl, WebSessionProvider webSessionProvider)
        {
            this.tabControl = tabControl;
            this.webSessionProvider = webSessionProvider;
        }
 
 
        /// <summary>
        /// Добавит новую вкладку с WebControl(ом)
        /// </summary>
        public void AddPage()
        {
            WebControl webControl = new_WebControl();
 
            CreateTabPage(webControl);
 
        }
 
        /// <summary>
        /// Добавит новую вкладку с WebControl(ом) и с Uri на который кликнули 
        /// </summary>
        /// <param name="e">e, объект класса ShowCreatedWebViewEventArgs</param>
        public void AddPage_ClickReference(ShowCreatedWebViewEventArgs e)
        {
            WebControl webControl = new_WebControl();
 
            webControl.Source = e.TargetURL;
 
            CreateTabPage(webControl);
        }
 
        /// <summary>
        /// (Внимание! Метод зависит от метода TabControlMouseDown) Закрывает вкладку. Или сделать как здесь [url]http://www.youtube.com/watch?v=DJu2ivQFooc[/url]
        /// </summary>
        public void CloseTab()
        {
 
            for (int i = 0; i < tabControl.TabCount - 1; i++)
            {
                if (tabControl.GetTabRect(i).Contains(tabControl.PointToClient(lastClickPos)))
                {
                    tabControl.TabPages[i].Dispose();
                }
            }
 
        }
 
        /// <summary>
        /// Создает на tabControl(е), TabPage с webControl(ом)
        /// </summary>
        /// <param name="webControl">WebControl, с которым будет создавать страницу</param>
        public void CreateTabPage(WebControl webControl)
        {
            tabControl.TabPages.Insert(tabControl.TabCount - 1, "Новая вкладка");
            tabControl.TabPages[tabControl.TabCount - 2].Controls.Add(webControl);
            tabControl.SelectedIndex = tabControl.TabCount - 2;
        }
 
        /// <summary>
        /// Присвоит текст adressBox(у)
        /// </summary>
        /// <param name="addressBox">объект addressBox, с которым будет работать метод</param>
        public void SetTextAddressBox(AddressBox addressBox)
        {
            if (addressBox.WebControl.Source == null)
            {
                addressBox.AccessibilityObject.Value = "about:blank";
            }
            else
            {
                addressBox.AccessibilityObject.Value = addressBox.WebControl.Source.OriginalString;
            }
        }
 
        /// <summary>
        /// Задает adressBox(y) webControl, принадлежащий вкладки
        /// </summary>
        /// <param name="addressBox">addressBox с которым будет работать</param>
        /// <param name="Tab">TabPage с которого будет считываться WebControl</param>
        public void SetWebControlInAddressBox(AddressBox addressBox)
        {
            addressBox.WebControl = (WebControl)tabControl.TabPages[tabControl.SelectedIndex].Controls[0];
        }
 
        /// <summary>
        /// (Определить TabControlMouseDown в событие TabControl.MouseDown) Задает координаты, кликом правой кнопки мыши по вкладке, объекту, для метода CloseTab
        /// </summary>
        /// <param name="e">e - объект события TabControl.MouseDown</param>
        public void TabControlMouseDown(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                lastClickPos = Cursor.Position;
            }
        }
 
        /// <summary>
        /// WebControl с некоторыми параметрами
        /// </summary>
        /// <returns>WebControl</returns>
        public WebControl new_WebControl()
        {
            WebControl webControl = new WebControl();
            webControl.Dock = DockStyle.Fill;
            webControl.DocumentReady += webControl_DocumentReady;
            webControl.ShowCreatedWebView += webControl_ShowCreatedWebView;
 
            webSessionProvider.Views.Add(webControl);
 
            return webControl;
        }
 
        /// <summary>
        /// Метод для события webControl.DocumentReady. Меняет текст вкладки, когда страница грузится и загружена
        /// </summary>
        private void webControl_DocumentReady(object sender, DocumentReadyEventArgs e)
        {
            ((WebControl)sender).Parent.Text = ((WebControl)sender).Title;
        }
 
        /// <summary>
        /// Метод для события webControl.ShowCreatedWebView. При клике по ссылке, создает новую вкладку с WebControl(ом) и с Uri, на который кликнули
        /// </summary>
        private void webControl_ShowCreatedWebView(object sender, ShowCreatedWebViewEventArgs e)
        {
            AddPage_ClickReference(e);
        }
 
        /// <summary>
        /// Освободить память webControl(а), на выбранной вкладке
        /// </summary>
        /// <param name="addressBox">addressBox</param>
        public void ClearMemory(AddressBox addressBox)
        {
            Uri uri = (tabControl.TabPages[tabControl.SelectedIndex].Controls[0] as WebControl).Source;
 
            webSessionProvider.Views.Remove(tabControl.TabPages[tabControl.SelectedIndex].Controls[0] as WebControl); // Не обязательная строка
            tabControl.TabPages[tabControl.SelectedIndex].Controls[0].Dispose();
 
            WebControl webControl = new_WebControl();
            addressBox.WebControl = webControl;
 
            webSessionProvider.Views.Add(webControl);
 
            webControl.Source = uri;
 
            tabControl.TabPages[tabControl.SelectedIndex].Controls.Add(webControl);
        }
 
    }
}


Класс ProgrammMethods
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System.Windows.Forms;
using Awesomium.Windows.Forms;
 
namespace AwesomiumProgramm
{
    class ProgrammMethods
    {
        NavigationOnWebControl NOW;
        public TabControlAwesomium TCA;
 
        public ProgrammMethods(TabControl tabControl, WebSessionProvider webSessionProvider)
        {
            NOW = new NavigationOnWebControl();
            TCA = new TabControlAwesomium(tabControl, webSessionProvider);
        }
 
        public void AddPages(TabControl tabControl) // При загрузки формы добавляет 2 вкладки на TabControl
        {
            tabControl.TabPages.Insert(1, "   +");
            TCA.AddPage();
        }
 
        public void authorization(WebControl webControl)
        {
            //Yandex.ru
            NOW.WriteInField(webControl, NavigationOnWebControl.GetElementBy.Name, "login", "логин");
            NOW.WriteInField(webControl, NavigationOnWebControl.GetElementBy.Name, "passwd", "парол123");
            NOW.PressButton(webControl, NavigationOnWebControl.GetElementBy.ClassName, "button auth__login-button button_size_s button_theme_normal i-bem button_js_inited");
 
            //https://signup.live.com/signup?wa=wsignin1.0&rpsnv=12&ct=1438670714&rver=6.0.5276.0&wp=MCMBI&wlcxt=MSDN%24MSDN%24MSDN&wreply=https%3a%2f%2fmsdn.microsoft.com%2fru-ru%2fdn308572&id=254354&bk=1438670732&uiflavor=web&uaid=f38a6afb74524c22a1a76f8a06aca926&mkt=RU-RU&lc=1049&lic=1
            //NOW.SelectComboBoxValue(webControl, NavigationOnWebControl.GetElementBy.Id, "BirthDay", 8);
        }
 
        public void TabControlSelecting(TabControlCancelEventArgs e, AddressBox addressBox) //Добавляет страницу -> выбираем или выбирает эту страницу -> задает этой странице addressBox и задает текст addressBox(а) этой страницы
        {
 
            if (e.TabPage.Text == "   +")
            {
                TCA.AddPage();
            }
            else
            {
                TCA.SetWebControlInAddressBox(addressBox);
                TCA.SetTextAddressBox(addressBox);
            }
 
        }
 
        
 
 
    }
}


Класс Form1
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using Awesomium.Windows.Forms;
using System;
using System.Windows.Forms;
 
namespace AwesomiumProgramm
{
    public partial class Form1 : Form
    {
        ProgrammMethods pm;
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            pm = new ProgrammMethods(tabControl1, webSessionProvider1);
            pm.AddPages(tabControl1);
        }
 
 
        private void button1_Click(object sender, EventArgs e) // Назад
        {
            webControl().GoBack();
        }
 
        private void button2_Click(object sender, EventArgs e) // Вперед
        {
            webControl().GoForward();
        }
 
        private void button3_Click(object sender, EventArgs e) // Обновить
        {
            webControl().Reload(false);
        }
        
        private void button4_Click(object sender, EventArgs e) // нажатие кнопки на сайте, заполнение поля и тп.
        {
            pm.authorization(webControl());
        }
 
        private void button5_Click(object sender, EventArgs e) // "Освободить память"
        {
            pm.TCA.ClearMemory(addressBox1);
        }
 
        private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) //Добавить страницу(если вкладка с текстом  + ) -> выбирает эту страницу -> задает этой странице addressBox и задает текст addressBox(а) этой страницы
        {
            pm.TabControlSelecting(e, addressBox1);
        }
 
        // ---------------------------> Данными 2-мя методами можно обойтись, если создать свой контрол, как тут [url]http://www.youtube.com/watch?v=DJu2ivQFooc[/url]
        private void tabControl1_MouseDown(object sender, MouseEventArgs e) //При клике по вкладке, определяет эту вкладку
        {
            pm.TCA.TabControlMouseDown(e);
        }
 
        private void закрытьВкладкуToolStripMenuItem_Click(object sender, EventArgs e) //Закрыть вкладку
        {
            pm.TCA.CloseTab();
        }
        //  <---------------------------
 
        WebControl webControl() // Возвращает WebControl выбранной вкладки
        {
            return tabControl1.TabPages[tabControl1.SelectedIndex].Controls[0] as WebControl;
        }
        
 
    }
}



3. Заключение.

Возможно я где то, что то не правильно назвал, описал или еще чего либо сделал сделал не правильно. Но надеюсь Вы меня простите
Всем спасибо за внимание. На днях(постараюсь в этом месяце) запишу видео по статье - как собрать проект.

Чтобы найти, что то в гугле, ему надо помочь и тогда гугл поможет Вам!
Метки c#
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 32
Комментарии
  1. Старый комментарий
    Аватар для Avazart
    C# ?
    Запись от Avazart размещена 08.08.2015 в 16:47 Avazart вне форума
  2. Старый комментарий
    Да. Забыл подписать, что C#) Спасибо
    Запись от Serx размещена 08.08.2015 в 16:51 Serx вне форума
  3. Старый комментарий
    Аватар для diadiavova
    Я об авесомиуме узнал некоторое время назад и даже установил его, но воспользоваться как-то руки не доходили, впервые попробовал только вчера, так что мало что могу сказать об этом. Но, увидев статью о нем на форуме, надеялся пополнить знания. Например мне жутко интересно было узнать, чем он лучше стандартного WebBrowser, но из этой статьи я узнал, что лучше он тем, что это гуглбраузер вместо WebBrowser. Других плюсов нет что ли? Из минусов я отметил бы то, что вчера малипусенький проектик собрал (с браузером и одной кнопкой), так вот папка дебаг весила более 40мб. Вот таскать со своей программой такую туеву хучу чужого кода ради того, что это "гуглбраузер вместо WebBrowser" - по-моему какой-то не очень убедительный аргумент. Хотелось бы все-таки больше узнать о преимуществах данного выбора.
    Запись от diadiavova размещена 08.08.2015 в 17:24 diadiavova вне форума
  4. Старый комментарий
    Так зачем папку Debug таскать?(может Вам конечно надо, но для работоспособности хватает и самого .exe файла)
    Из плюсов, сам только месяц знаком с awesomium, конечно хотелось бы написать больше, если знал бы, что писать. А так спасибо за комментарий
    Запись от Serx размещена 08.08.2015 в 17:44 Serx вне форума
  5. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Serx
    Так зачем папку Debug таскать?(может Вам конечно надо, но для работоспособности хватает и самого .exe файла)
    Я не говорю, что надо дебаг таскать, но в дистрибутив придется включить распространяемые библиотеки, а они весят немало. И что-то я очень сильно сомневаюсь, что без этих библиотек на другой машине (где не установлен авесомиум) ехе будет работать. Вот как-то в чудеса не верю ))
    Запись от diadiavova размещена 08.08.2015 в 17:50 diadiavova вне форума
  6. Старый комментарий
    Цитата Сообщение от diadiavova
    Я не говорю, что надо дебаг таскать, но в дистрибутив придется включить распространяемые библиотеки, а они весят немало. И что-то я очень сильно сомневаюсь, что без этих библиотек на другой машине (где не установлен авесомиум) ехе будет работать. Вот как-то в чудеса не верю ))
    Понял) Спасибо за знание - не знал, что авесомиум должен быть установлен и на другом компьютере.
    Запись от Serx размещена 08.08.2015 в 17:57 Serx вне форума
  7. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Serx
    Понял) Спасибо за знание - не знал, что авесомиум должен быть установлен и на другом компьютере.
    Ну я этого не говорил. Просто в меню "Сборка" выбери публикацию проекта и посмотри что будет в папке "publish". Вот все это придется распространять вместе с программой. То, что ты устанавливаешь у себя - это SDK и там много такого, что нужно только разработчику, но распространяемый пакет тоже весит немало.
    Запись от diadiavova размещена 08.08.2015 в 18:33 diadiavova вне форума
  8. Старый комментарий
    Цитата Сообщение от diadiavova
    Ну я этого не говорил. Просто в меню "Сборка" выбери публикацию проекта и посмотри что будет в папке "publish". Вот все это придется распространять вместе с программой. То, что ты устанавливаешь у себя - это SDK и там много такого, что нужно только разработчику, но распространяемый пакет тоже весит немало.
    В общем Вы правы. И постараюсь в понедельник найти больше о плюсах и минусах и дополню блог.
    Запись от Serx размещена 08.08.2015 в 20:00 Serx вне форума
  9. Старый комментарий
    В общем дополнил немного плюсы и минусы и как будет появляться больше информации, блог будет пополнятся. Так же если читатели желают, чем либо дополнить блог, то пишите свое дополнение в комментарии. Всем спасибо.
    Запись от Serx размещена 10.08.2015 в 08:58 Serx вне форума
  10. Старый комментарий
    Можно ссылочку а проект, не хочу сам форму накидывать.
    Запись от fan92rus размещена 22.01.2017 в 20:41 fan92rus вне форума
  11. Старый комментарий
    Аватар для Avazart
    Цитата Сообщение от diadiavova
    Я об авесомиуме узнал некоторое время назад и даже установил его, но воспользоваться как-то руки не доходили, впервые попробовал только вчера, так что мало что могу сказать об этом. Но, увидев статью о нем на форуме, надеялся пополнить знания. Например мне жутко интересно было узнать, чем он лучше стандартного WebBrowser, но из этой статьи я узнал, что лучше он тем, что это гуглбраузер вместо WebBrowser. Других плюсов нет что ли? Из минусов я отметил бы то, что вчера малипусенький проектик собрал (с браузером и одной кнопкой), так вот папка дебаг весила более 40мб. Вот таскать со своей программой такую туеву хучу чужого кода ради того, что это "гуглбраузер вместо WebBrowser" - по-моему какой-то не очень убедительный аргумент. Хотелось бы все-таки больше узнать о преимуществах данного выбора.
    40M это нормально для стороннего браузера.
    (TChromium в VCL и WebKit в Qt весят больше)

    Лучше чем IE который может быть разных версий на компе и вести себя совсем по разному.
    У меня уже было такое. У меня работает у заказчика- нет из-за разных версий.
    Обработчики событий по разному вызывались.
    (Правда я использовал VCL аналог - обвертки на IE)
    Запись от Avazart размещена 22.01.2017 в 22:43 Avazart вне форума
  12. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    40M это нормально для стороннего браузера.
    (TChromium в VCL и WebKit в Qt весят больше)

    Лучше чем IE который может быть разных версий на компе и вести себя совсем по разному.
    У меня уже было такое. У меня работает у заказчика- нет из-за разных версий.
    Обработчики событий по разному вызывались.
    (Правда я использовал VCL аналог - обвертки на IE)
    Для стороннего браузера - конечно нормально. Другой вопрос: нормально ли это для приложения, которое не использует каких-то специфических особенностей этого браузера и могло бы вполне обойтись штатным браузером? А уж если само приложение "весит" 1-2 Мб, то вопрос становится вдвойне актуальным. Кроме того, скорей всего это будет не единственная сторонняя библиотека в проекте, а если подобным образом относиться к данному вопросу и добавлять сторонние либо по каждому поводу, то общий объем всего этого "добра" может оказать весьма внушительным.
    С версиями ИЕ проблема может и актуальна, но далеко не всегда критична. Ну в самом деле, на скольких машинах в данный момент работает скажем шестая версия или даже восьмая? А в скольких таких случаях это происходит из-за того, что по каким-то причинам более позднюю версию невозможно установить? Я уже не говорю о том, что во время отладки приложения можно манипулировать с режимами совместимости и увидеть, как это будет работать в разных версиях.
    В общем и целом: авесомиум - неплохая штука, но я как-то не видел убойных аргументов в пользу того, чтобы использовать ее везде, где нужен браузер. Я скорее наоборот, сначала рассмотриваю возможность использования штатного браузера и как правило этого мне хватает.
    Запись от diadiavova размещена 02.02.2017 в 13:18 diadiavova вне форума
  13. Старый комментарий
    Аватар для Avazart
    Я не считаю что ~50 M и тем более 1-2М это проблема в наше время особенно если оно выполняет поставленную задачу.

    С версиями ИЕ проблема может и актуальна, но далеко не всегда критична.
    Не знаю мой заказчик возбухал... типа а что я теперь на все 20 машинах должен обновлять IE (там стояла старая версия, если не ошибаюсь 8 а нужна была 11)

    Кроме того с другим заказчиком я сильно намаялся пока обнаружил в чем проблема и почему оно у меня работает, а у него нет при чем не выдает внятных ошибок.
    Запись от Avazart размещена 02.02.2017 в 20:05 Avazart вне форума
  14. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    Я не считаю что ~50 M и тем более 1-2М это проблема в наше время особенно если оно выполняет поставленную задачу.
    А если поставленную задачу можно выполнить и без этого? И что значит в наше время? А если программу надо запускать на планшете? Про 1-2 Мб я говорил о твоей программе, когда твоя программа весит столько, а для того, чтобы она могла работать надо еще таскать с ней несколько либ, общий объем которых "утяжеляет" программу в несколько десятков раз.
    Цитата Сообщение от Avazart
    Не знаю мой заказчик возбухал... типа а что я теперь на все 20 машинах должен обновлять IE (там стояла старая версия, если не ошибаюсь 8 а нужна была 11)
    Ну я не спорю, что заказчик всегда прав, независимо от того, насколько неадекватны его требования, поскольку он платит. Я ведь не об этом говорю, а о ситуации, когда выбор от тебя зависит.
    Цитата Сообщение от Avazart
    Кроме того с другим заказчиком я сильно намаялся пока обнаружил в чем проблема и почему оно у меня работает, а у него нет при чем не выдает внятных ошибок.
    Подобные проблемы могут возникнуть с чем угодно и авесомиум от этого тоже не застрахован.

    Кстати, если бы у меня спросили чем штатный браузер лучше, то я, пожалуй, несколько уникальных возможностей все-таки смог бы привести. А вот апологеты всяких там авесомиумов, как правило приводят либо какие-то частные случаи типа "заказчик ни в какую не хочет ставить новый ИЕ", либо вообще отвечают общими фразами типа "он дает возможность использовать вебкит, что уже само по себе хорошо". Нельзя сказать, что у авесомиума вообще нет преимуществ, в общем и целом все не настолько радужно как может показаться на первый взгляд. Кстати, на форуме неоднократно видел такую ситуацию: человек спрашивает как что-то сделать в браузере, а отвечающий сам не знает и по этой причине советует авесомиум, поскольку там все на поверхности лежит.
    Запись от diadiavova размещена 03.02.2017 в 15:12 diadiavova вне форума
  15. Старый комментарий
    Аватар для Avazart
    А если поставленную задачу можно выполнить и без этого? И что значит в наше время? А если программу надо запускать на планшете? Про 1-2 Мб я говорил о твоей программе, когда твоя программа весит столько, а для того, чтобы она могла работать надо еще таскать с ней несколько либ, общий объем которых "утяжеляет" программу в несколько десятков раз.
    По сравнениею с весом самого фреймворка NET это копейки....

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

    Я не знаю как в С#, но обычно у сторонних браузеров действительно более сносный интерфейс чем всякие обвертки над IE.
    Ну и что припоминается это куки, при использовании "штатного" приходится делить куки с IE.
    Запись от Avazart размещена 03.02.2017 в 16:36 Avazart вне форума
  16. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    По сравнениею с весом самого фреймворка NET это копейки....
    При чем тут вес фреймворка? От фреймворка никуда не денешься.
    Цитата Сообщение от Avazart
    Ну так есть причина, а именно разноверсица...
    Ситуация, когда кто-то категорически не хочет устанавливать актуальную версию ИЕ, если и не уникальна, то по крайней мере достаточно редка. Все-таки браузерный движок - неотъемлемая часть системы и его обновление - вещь нужная, даже если ИЕ не используется. А насчет "разноверсицы", то при наличии последней версии ИЕ версиями можно управлять. Причем можно установить в реестре режим совместимости по умолчанию, но и на самой странице можно указывать версию, что позволяет разные страницы отображать в режиме совместимости с разными версиями. Так что поддержка версий в триденте более гибкая.
    Цитата Сообщение от Avazart
    Я не знаю как в С#, но обычно у сторонних браузеров действительно более сносный интерфейс чем всякие обвертки над IE.
    Ну и что припоминается это куки, при использовании "штатного" приходится делить куки с IE.
    Опять-таки интерфейс браузера ни при чем, ведь речь идет о контроле в чистом виде, так что интрефейс ты пишешь сам.
    Что до куков, то ту согласен, если есть в этом необходимость, то это аргумент.

    Пара слов о преимуществах браузера, который "искаропки".
    Прямой доступ к ком-интерфейсам модели DOM, то есть можно запросить набор элементов, выполнить любые манипуляции с ними и результат выполнения будет отображен в браузере. Насколько я знаю, максимум что в этом смысле предлагает авесомиум - это набор прокси-объектов, с которых можно получить данные об элементе.
    Можно передать самописный объект браузеру и обращаться к нему со страницы.
    Гибкая настройка параметров безопасности (можно, например, разрешить кроссдоменные аякс-запросы и куча чего еще).
    Можно использовать ActiveX-объекты на странице.

    Понятно, что последние два вряд ли актуальны, если браузер используется для создания какого-нибудь браузерного бота, где важно, чтобы все работало стандартненько. Но если браузер используется как алтернативная гуй-платформа то все это может пригодиться.
    Запись от diadiavova размещена 03.02.2017 в 17:39 diadiavova вне форума
  17. Старый комментарий
    Аватар для Avazart
    При чем тут вес фреймворка? От фреймворка никуда не денешься.
    Для сравнения, удаляем фремворк используем С++ ....

    Опять-таки интерфейс браузера ни при чем, ведь речь идет о контроле в чистом виде, так что интрефейс ты пишешь сам.
    Что до куков, то ту согласен, если есть в этом необходимость, то это аргумент.
    Где я сказал GUI ? Я имею ввиду OLE и интерфейс самой обвертки.

    Насколько я знаю, максимум что в этом смысле предлагает авесомиум - это набор прокси-объектов, с которых можно получить данные об элементе.
    Насколько я знаю обычно выполняется js код который делает все что нужно....
    Запись от Avazart размещена 03.02.2017 в 20:23 Avazart вне форума
  18. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    Для сравнения, удаляем фремворк используем С++ ....
    Я думал, что с дотнетчиком разговариваю. Но в любом случае, фреймворк удалить невозможно, поскольку он - часть операционной системы. Ну и соответственно при развертывании приложения фреймворк вместе с ним надо поставлять только для старой винды (на хр его еще не было, а дальше там может версия другая быть, поскольку в систему входит версия фреймворка, которая была актуальной на момент выхода самой системы, более позднюю надо устанавливать).
    Цитата Сообщение от Avazart
    Где я сказал GUI ? Я имею ввиду OLE и интерфейс самой обвертки.
    А где я сказал, что ты это сказал? )) Просто сам браузер можно использовать по-разному. Можно работать с какими-то документами из интернета и это только один вариант использования. Можно просматривать в нем документы, сформированные приложением. А можно реализовать в нем какой-то функционал, который будет использоваться в приложении и тут тоже есть и варианты и различные подходы к реализации и различные причины для использования такого подхода.
    Цитата Сообщение от Avazart
    Насколько я знаю обычно выполняется js код который делает все что нужно....
    В авесомиуме так и есть, а в браузере от майкрософт есть разные возможности.
    Запись от diadiavova размещена 06.02.2017 в 11:52 diadiavova вне форума
  19. Старый комментарий
    Аватар для Avazart
    Но в любом случае, фреймворк удалить невозможно,
    Хз, но в Win7-ке вроде можно....
    В любом случае работы программы нужно определенное "окружение" всегда есть какие либо зависимости и <100 M
    это вполне нормальный размер для нормальной программы(хелоуворлды не в счет)

    А можно реализовать в нем какой-то функционал,
    Какой? Используя IE вы конечно делаете программу легче, но с тем более зависимой от настроек системы(IE).
    Запись от Avazart размещена 06.02.2017 в 17:46 Avazart вне форума
  20. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    Хз, но в Win7-ке вроде можно....
    В любом случае работы программы нужно определенное "окружение" всегда есть какие либо зависимости и <100 M
    это вполне нормальный размер для нормальной программы(хелоуворлды не в счет)
    Начиная с висты фреймворк стал частью системы. Ну и окружение окружением, но есть разница между окружением, которое является частью системы и тем, что надо "таскать с собой". Ну и потом, взять какую-нибудь яву, вроде ставить надо и все такое, но ее один раз поставил и все приложения требующие ее (а таких немало) будут работать, а здесь речь о либе, которая будет лежать в папке твоего приложения и использоваться только им.
    Цитата Сообщение от Avazart
    Какой?
    Ну например, в винформах отсутствуют всплывающие события, так что можно использовать браузер там, где они нужны. Или в случае приложений с расширяемой архитектурой, совсем неплохо авторам плагинов предложить вомзожность писать их с использованием клиентских веб-технологий, которые и проще и знакомы в той или иной мере практически всем программистам.
    Цитата Сообщение от Avazart
    Используя IE вы конечно делаете программу легче, но с тем более зависимой от настроек системы(IE).
    Во-первых для настройки ИЕ далеко не все влияют на контрол, есть масса настроек актуальных только для контрола. Во-вторых, тот же режим совместимости можно указать прямо на странице, не затрагивая таким образом настройки, влияющие на что-то другое.
    Запись от diadiavova размещена 07.02.2017 в 11:24 diadiavova вне форума
 
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru