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

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

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

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

1. Введение.

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


Нажмите на изображение для увеличения
Название: AwesomiumBrowser.PNG
Просмотров: 925
Размер:	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
Просмотров: 4154

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

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


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

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


Нажмите на изображение для увеличения
Название: Конструктор AwesomiumBr.PNG
Просмотров: 1070
Размер:	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
Просмотров: 3511

Размер: 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
    которое является частью системы и тем, что надо "таскать с собой".
    Ну фреймворк то нужно "такскать за собой" из-за разновресицы.


    о либе, которая будет лежать в папке твоего приложения и использоваться только им.
    Это завит ровно от того что какие приложения использует пользователь. Если NET программы нет на компе то NET тоже будет лежать грузом.

    Во-первых для настройки IЕ далеко не все влияют на контрол, есть масса настроек актуальных только для контрола. Во-вторых, тот же режим совместимости можно указать прямо на странице, не затрагивая таким образом настройки, влияющие на что-то другое
    Вроде же согласились насчет куки, а это важно. Это все морока, морока для пользователя до настраивать IE.

    Ну например, в винформах отсутствуют всплывающие события, так что можно использовать браузер там, где они нужны. Или в случае приложений с расширяемой архитектурой, совсем неплохо авторам плагинов предложить возможность писать их с использованием клиентских веб-технологий, которые и проще и знакомы в той или иной мере практически всем программистам.
    Что значит "всплывающие события" подсказки в смысле? Так это проще будет делать программно.

    Я вижу одно применение отображение простого html в окне программы для неосновного функционала, например для справки/документации.

    Для отображения же сайтов IE очень плохо подходит ибо отображает криво, js- ложатся напрочь.
    Запись от Avazart размещена 07.02.2017 в 13:29 Avazart вне форума
  2. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    Ну фреймворк то нужно "такскать за собой" из-за разновресицы.
    Не совсем так. Например версии 3.0 и 3.5 являются надстройками для версии 2.0, так что установка 3.5 гарантриует запуск приложений под более ранние версии. С версиями 4.хх немного другая тема, они уже запускаются под новой версией CLR, поэтому если на компе установлена только такая версия, то "двойка" и "тройки" запускаться не будут. Я не знаю точно, есть ли на восьмой и десятой винде предыдущие версии фреймворка, поэтому не могу сказать будет ли там "искаропки" запускаться приложение написанное, скажем, под второй фреймворк (думаю, что все там есть, но утверждать не буду, у меня всегда все есть, поскольку устанавливается все со студией). Но на самом деле это вообще не проблема.
    Цитата Сообщение от Avazart
    Это завит ровно от того что какие приложения использует пользователь. Если NET программы нет на компе то NET тоже будет лежать грузом.
    Огромное количество программ его используют, чего не скажешь об авесомиуме. Но даже если бы куча программ использовала авесомиум, то свой экземпляр этой либы пришлось бы ставить для каждой из них.
    Цитата Сообщение от Avazart
    Вроде же согласились насчет куки, а это важно. Это все морока, морока для пользователя до настраивать IE.
    Я согласился с тем, что в тех ситуациях, когда это важно - действительно лучше выбрать что-то другое. Но это не всегда имеет значение. У авесомиума есть другие полезности, отсустствующие в иешном браузере. Например возможность получить изображение страницы или вообще контролировать процесс прорисовки. В мсхтмл есть интрефейс для рендеринга элементов страницы, но он уже давно перестал работать. Есть частные случаи, когда использование того же авесомиума предпочтительнее. Но говорить, что он во всем лучше я бы не стал.
    Цитата Сообщение от Avazart

    Что значит "всплывающие события" подсказки в смысле? Так это проще будет делать программно.
    События, которые можно обрабатывать не только в элементах, вызвавших эти события, но и в контейнерах этих элементов. Например события ячеек таблицы можно обрабатывать в самой таблице.
    Цитата Сообщение от Avazart
    Я вижу одно применение отображение простого html в окне программы для неосновного функционала, например для справки/документации.
    Ну с этим любой браузер справится "на ура". Даже последние версии не понадобятся. Если дело только в этом, то о чем вообще спор?
    Цитата Сообщение от Avazart
    Для отображения же сайтов IE очень плохо подходит ибо отображает криво, js- ложатся напрочь.
    По умолчанию он работает в режиме совместимости с IE7. Эта проблема легко решается внесением в реестр нужной версии, эта запись будет актуальна для конкретного приложения. Последние верии ИЕ поддерживают веб-стандарты и все нормально отображают.
    Запись от diadiavova размещена 07.02.2017 в 14:05 diadiavova вне форума
  3. Старый комментарий
    Аватар для Avazart
    С версиями 4.хх немного другая тема,
    https://www.cyberforum.ru/orde... 12745.html

    Огромное количество программ его используют, чего не скажешь об авесомиуме.
    А если я вообще NET программы не использую, я об этом говорил...

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

    Эта проблема легко решается внесением в реестр нужной версии, эта запись будет актуальна для конкретного приложения.
    Запись в реест сама по себе проблема. И что вы там говорили про не зависимость настроек от IE ?
    Кстати я не думал что это проблема как Delphi есть в C#.
    Запись от Avazart размещена 07.02.2017 в 14:14 Avazart вне форума
  4. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    Глянул мельком. Если правильно понял, то проблему можно решить, просто скомпилировав приложение под разные фреймворки и распространять две версии. Вот если оно написано под "четверку", то на более ранних уже не запустишь, надо ставить. Но это не такая распространенная ситуация, поскольку подразумевает, что надо заставить работать программу на старой винде. А человек, пользующийся старой виндой и принципиально не желающий ставить на нее новый фреймворк - ну не такой ведь распространенный случай.
    Цитата Сообщение от Avazart
    А если я вообще NET программы не использую, я об этом говорил...
    Ну тогда фреймворк тебе не нужен и ставить его незачем. А в чем вопрос-то?))
    Цитата Сообщение от Avazart
    Это не есть так, ничто не мешает сделать инсталятор и использовать авесомиум или другой "пакет" совместно несколькими программами. Для этого лишь необходимо соглашение о том где его искать.
    Такая ситуация вполне может быть если я пишу не одну программу, а пакет программ.
    Да, но как правило программы эти пишут разные разработчики и каждый впихнет в дистрибутив свой экземпляр.
    Цитата Сообщение от Avazart

    Запись в реест сама по себе проблема. И что вы там говорили про не зависимость настроек от IE ?
    Кстати я не думал что это проблема как Delphi есть в C#.
    Про независимость от ИЕ я говорил, что есть настройки, которые устанавливаются отдельно для контрола и отдельно для программы. В данном случае речь именно о такой настройке. Мало того, режим совместимости для контрола устанавливается только для конкретного приложения, то есть в реестр вносится имя приложения и соответствующая версия
    Internet Feature Controls (B..C) (Internet Explorer)
    Что до дельфи, то это тут вообще ни при чем. Это системная функция и работает она именно так, независимо от того, в каком языке/платформе используется.
    Запись от diadiavova размещена 07.02.2017 в 14:31 diadiavova вне форума
  5. Старый комментарий
    Аватар для Avazart
    Но это не такая распространенная ситуация, поскольку подразумевает, что надо заставить работать программу на старой винде. А человек, пользующийся старой виндой и принципиально не желающий ставить на нее новый фреймворк - ну не такой ведь распространенный случай.
    Заказчики разные бывают, есть даже такие что требует что бы работало под XP.

    Это системная функция и работает она именно так, независимо от того, в каком языке/платформе используется.
    Да но вероятно ее можно было учесть в обвертках.

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

    И да винда это не линукс тут нет менеджера пакетов.
    Запись от Avazart размещена 07.02.2017 в 14:38 Avazart вне форума
  6. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    Заказчики разные бывают, есть даже такие что требует что бы работало под XP.
    Ну по этому поводу я уже сказал, что если заказчику надо, то надо делать. Это вообще не вопрос.
    Запись от diadiavova размещена 07.02.2017 в 14:40 diadiavova вне форума
  7. Старый комментарий
    Аватар для Avazart
    Это не такой редкий случай.
    Запись от Avazart размещена 07.02.2017 в 14:58 Avazart вне форума
  8. Старый комментарий
    Аватар для diadiavova
    Цитата Сообщение от Avazart
    Это не такой редкий случай.
    Да это понятно, просто я уже писал, что обсуждать вопрос "Что лучше выбрать в ситуации, когда выбираешь не ты?" - немного бессмысленно.
    Запись от diadiavova размещена 07.02.2017 в 15:09 diadiavova вне форума
  9. Старый комментарий
    Аватар для Avazart
    del.
    Запись от Avazart размещена 07.02.2017 в 15:37 Avazart вне форума
  10. Старый комментарий
    Аватар для 1337trix
    А есть документация по отправке POST\GET запросов?
    Запись от 1337trix размещена 26.04.2017 в 16:49 1337trix вне форума
  11. Старый комментарий
    Аватар для Avazart
    А есть документация по отправке POST\GET запросов?
    Вы о чем?
    Запись от Avazart размещена 26.04.2017 в 19:18 Avazart вне форума
  12. Старый комментарий
    Цитата Сообщение от 1337trix
    А есть документация по отправке POST\GET запросов?
    Есть ли документация по отправке запросов, с помощью awesomium? Не знаю. Возможно есть где то здесь(документация awesomium) а возможно и нет там.

    ________________________________________ ________________________________________ ________________________________________ _________
    А если вам например нужно нажать на кнопку и выполнить отправление 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 Serx вне форума
 
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты 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
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru