Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2015, 01:39   #1
Mr_DeviL
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 12
По умолчанию C# awesomium дождаться полной загрузки страницы

Проблема в заголовке. Гуглил, нашел много вариантов, но не понял все-же как это работает. Идет через какие-то события. Можно ли написать ожидание загрузки методом? И еще вопрос: как ожидать окончания редиректа? Если можно, максимально подробно.
P.S.
Код:
while (webControl.IsLoading) Application.DoEvents();
не подходит.
Mr_DeviL вне форума Ответить с цитированием
Старый 27.04.2015, 08:23   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если 1.7.4, то ждать LoadingFrameCompleted с IsMainFrame == true.
Если 1.7.5, то лучше DocumentReady с вроде ReadyState == Loaded.


Цитата:
И еще вопрос: как ожидать окончания редиректа?
Что такое "окончание редиректа"? Если загрузки страницы после редиректа, то так же, даже и не узнаете что редирект был.

Цитата:
Гуглил, нашел много вариантов
На офф. сайте все есть.
http://wiki.awesomium.net/general-us...web-views.html
http://wiki.awesomium.net/changelogs...g-changes.html
Вот пример ожидания загрузки в том же потоке (для UI потока вряд ли лучшая идея):
Код:
bool LoadingFinished;

    Wb.LoadingFrameComplete += WbLoadingFrameCompleted;
    ...

void WbLoadingFrameCompleted(object sender, FrameEventArgs e)
{
    if (!e.IsMainFrame)
        return;

    LoadingFinished = true;
}

void LoadUrl(string url)
{
    LoadingFinished = false;

    Wb.Source = new Uri(url);
 
    while (!LoadingFinished)
    {
        Thread.Sleep(100);
        WebCore.Update(); // вроде не нужно с 1.7.4 и deprecated
                          // хотя наверно не нужно только если Awesomium в другом потоке,
                          // а если вы собрались UI поток блокировать (и Awesomium в нем), то скорее всего нужно
    }
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 27.04.2015 в 20:22.
Alex11223 вне форума Ответить с цитированием
Старый 27.04.2015, 20:31   #3
Mr_DeviL
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Если 1.7.4, то ждать LoadingFrameCompleted с IsMainFrame == true.
Если 1.7.5, то лучше DocumentReady с вроде ReadyState == Loaded.



Что такое "окончание редиректа"? Если загрузки страницы после редиректа, то так же, даже и не узнаете что редирект был.


На офф. сайте все есть.
http://wiki.awesomium.net/general-us...web-views.html
http://wiki.awesomium.net/changelogs...g-changes.html
Вот пример ожидания загрузки в том же потоке (для UI потока вряд ли лучшая идея):
Код:
bool LoadingFinished;

    Wb.LoadingFrameComplete += WbLoadingFrameCompleted;
    ...

void WbLoadingFrameCompleted(object sender, FrameEventArgs e)
{
    if (!e.IsMainFrame)
        return;

    LoadingFinished = true;
}

void LoadUrl(string url)
{
    LoadingFinished = false;

    Wb.Source = new Uri(url);
 
    while (!LoadingFinished)
    {
        Thread.Sleep(100);
        WebCore.Update(); // вроде не нужно с 1.7.4 и deprecated
                          // хотя наверно не нужно только если Awesomium в другом потоке,
                          // а если вы собрались UI поток блокировать (и Awesomium в нем), то скорее всего нужно
    }
}
я использую. 1.7.5 версию. Можно чуть подробнее? Если можно, с примером.
Тот пример что вы показали, я не понимаю. Мало опыта работы с событиями. И можно ли будет написать ожидание загрузки/окончание редиректа в метод, так чтобы после каждого перехода просто использовать метод?
Mr_DeviL вне форума Ответить с цитированием
Старый 27.04.2015, 20:53   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что такое редирект и в чем у вас с ним проблема? Если речь про обычный HTTP редирект (302), то ничем не отличается от любой другой страницы, ничего дополнительно делать не надо. А если об отдельной странице, которая загружается и с которой потом Javascript'ом редиректит, то начало перехода можно отслеживать например в AddressChanged, или просто ждать когда вышеописанное событие окончания загрузки два раза сработает.

Цитата:
Мало опыта работы с событиями.
Ну, что ж делать, набирайтесь опыта. Почитайте про C# книгу какую-нибудь.

При завершении загрузки срабатывает событие (LoadingFrameComplete или еще DocumentReady с 1.7.5) и в параметрах события (eventargs) установлено IsMainFrame == true (у первого) или ReadyState == Loaded (у второго).

Вот и подписывайтесь на одно из них и думайте что вы хотите делать когда оно сработало (и стоит соответствующий параметр). Например, вызвать какой-то метод.
Код:
void WbLoadingFrameCompleted(object sender, FrameEventArgs e)
{
    if (!e.IsMainFrame)
        return;

    DoSmth();
}
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 27.04.2015 в 21:05.
Alex11223 вне форума Ответить с цитированием
Старый 27.04.2015, 21:06   #5
Mr_DeviL
Пользователь
 
Регистрация: 13.04.2015
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Что такое редирект и чем у вас с ним проблема? Если речь про обычный HTTP редирект (302), то ничем не отличается от любой другой страницы, ничего дополнительно делать не надо. А если об отдельной странице, которая загружается и с которой потом Javascript'ом редиректит, то начало перехода можно отслеживать например в AddressChanged, или просто ждать когда вышеописанное событие окончания загрузки два раза сработает.


Ну, что ж делать, набирайтесь опыта. Почитайте про C# книгу какую-нибудь.

При завершении загрузки срабатывает событие (LoadingFrameComplete или еще DocumentReady с 1.7.5) и в параметрах события (eventargs) установлено IsMainFrame == true (у первого) или ReadyState == Loaded (у второго).

Вот и подписывайтесь на одно из них и думайте что вы хотите делать когда оно сработало (и стоит соответствующий параметр). Например, вызвать какой-то метод.
Код:
void WbLoadingFrameCompleted(object sender, FrameEventArgs e)
{
    if (!e.IsMainFrame)
        return;

    DoSmth();
}
Большое спасибо! Теперь стало ясней.
P.S. я имел в виду обычный редирект.
Mr_DeviL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CppWebBrowser момент окончания полной загрузки страницы KapeLLaN Общие вопросы C/C++ 3 15.09.2015 18:51
полная загрузка страницы (awesomium ) Soulyou12 C# (си шарп) 5 01.06.2015 18:30
Проблемы с загрузки страницы Fahman Общие вопросы Delphi 11 04.10.2014 17:50
Изменение страницы загрузки во фрейме Стремящийся JavaScript, Ajax 5 12.05.2012 21:00
ошибка загрузки страницы Vitek-pm Общие вопросы C/C++ 0 01.03.2009 01:11