C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
CppWebBrowser и переходы по ссылкам
Valdemar
Отправлено: 03.03.2006, 17:29


Мастер участка

Группа: Участник
Сообщений: 433



Содержимое CppWebBrowser формируется программно. Мне нужно отслеживать нажатие пользователем на ссылки, а в ответ очистить CppWebBrowser и вывести новую информацию. Вроде бы для этого нужно обработать событие OnBeforeNavigate2. В справке по этому событию написано, что заменив значение параметра URL, можно перейти к другому адресу. Но у меня переход происходит все равно по старому адресу.
Посоветуйте, как решить эту задачу.
dvv
Отправлено: 04.03.2006, 10:50


Дежурный стрелочник

Группа: Участник
Сообщений: 43



Пользовался этим событием. Но вот что-бы так круто и сразу  — изменить URL и ходу на другую страницу — не приходилось.
Прочел URL, остановил выполнение и запустил навый Navigate.
Так у меня отрабатывало нормально.

Отредактировано dvv — 04/03/2006, 10:50
GIZMO
Отправлено: 06.03.2006, 12:27


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Valdemar @ 03/03/2006, 17:29)
Содержимое CppWebBrowser формируется программно. Мне нужно отслеживать нажатие пользователем на ссылки, а в ответ очистить CppWebBrowser и вывести новую информацию. Вроде бы для этого нужно обработать событие OnBeforeNavigate2. В справке по этому событию написано, что заменив значение параметра URL, можно перейти к другому адресу. Но у меня переход происходит все равно по старому адресу.
Посоветуйте, как решить эту задачу.

В OnBeforeNavigate2:
1. Вызвать CppWebBrowser1->Stop()
2. Перейти по нужной ссылке CppWebBrowser1->Navigate("Lres://webhost.exe/nonavigate.htm", ...)
Valdemar
Отправлено: 06.03.2006, 13:34


Мастер участка

Группа: Участник
Сообщений: 433



GIZMO, если в обработчике события OnBeforeNavigate2 написать CppWebBrowser1->Navigate, то произойдет зацикливание.
GIZMO
Отправлено: 07.03.2006, 11:14


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Valdemar @ 06/03/2006, 13:34)
GIZMO, если в обработчике события OnBeforeNavigate2 написать CppWebBrowser1->Navigate, то произойдет зацикливание.

А ты пробовал? Вот типа такого прекрасно работает (правда в BHO, но разницы не должно быть):
CODE
...
case DISPID_BEFORENAVIGATE2:
       url = WideString(pDispParams->rgvarg[5].pvarVal->bstrVal);
       if (url == WideString("http://www.microsoft.com"))
       {
           m_pWebBrowser2->Stop();
           CComBSTR newURL = "Lres://webhost.exe/nonavigate.htm";
           m_pWebBrowser2->Navigate(newURL, NULL, NULL, NULL, NULL);
           ((*pDispParams).rgvarg)[0].boolVal = TRUE;
       }
...

приду домой попробуй в CppWebBrowser/

GIZMO
Отправлено: 07.03.2006, 11:25


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Valdemar @ 06/03/2006, 13:34)
GIZMO, если в обработчике события OnBeforeNavigate2 написать CppWebBrowser1->Navigate, то произойдет зацикливание.

А ты пробовал? Вот типа такого прекрасно работает (правда в BHO, но это теже яйца...):
CODE
...
case DISPID_BEFORENAVIGATE2:
       url = WideString(pDispParams->rgvarg[5].pvarVal->bstrVal);
       if (url == WideString("http://www.microsoft.com"))
       {
           m_pWebBrowser2->Stop();
           CComBSTR newURL = "Lres://webhost.exe/nonavigate.htm";
           m_pWebBrowser2->Navigate(newURL, NULL, NULL, NULL, NULL);
           ((*pDispParams).rgvarg)[0].boolVal = TRUE;
       }
...

приду домой попробуй в CppWebBrowser. Да чуть не забыл — вот это обязательно: ((*pDispParams).rgvarg)[0].boolVal = TRUE; В OnBeforeNavigate2 он выглядит так TOLEBOOL *Cancel, туда надо передать true.



Valdemar
Отправлено: 09.03.2006, 15:23


Мастер участка

Группа: Участник
Сообщений: 433



QUOTE
А ты пробовал?

Конечно пробовал. Просто я не делал проверки на определенный URL, т.к. мне надо перехватывать переходы на любые ссылки. С условием все работает.
И еще вопрос: как очистить содержимое CppWebBrowser, с целью вывода нового текста программно?
GIZMO
Отправлено: 12.03.2006, 00:47


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Valdemar @ 09/03/2006, 15:23)
QUOTE
А ты пробовал?

Конечно пробовал. Просто я не делал проверки на определенный URL, т.к. мне надо перехватывать переходы на любые ссылки. С условием все работает.
И еще вопрос: как очистить содержимое CppWebBrowser, с целью вывода нового текста программно?

CppWebBrowser->Navigate("about:blank", ...)
Valdemar
Отправлено: 13.03.2006, 12:26


Мастер участка

Группа: Участник
Сообщений: 433



Спасибо. Я прежде чем спросить так и делал, только оказалось, что написал с ошибкой, поэтому оно и не работало.
Max
Отправлено: 24.08.2006, 19:43


Не зарегистрирован







Содержимое CppWebBrowser формируется программно. Мне нужно отслеживать нажатие пользователем на ссылки, а в ответ очистить CppWebBrowser и вывести новую информацию.

А можно поподробней насчет отслеживания нажатия на ссылки и получения URL этой самой ссылки. Такое возможно? Если можно, приведите кусочек кода.
Valdemar
Отправлено: 25.08.2006, 07:49


Мастер участка

Группа: Участник
Сообщений: 433



QUOTE
А можно поподробней насчет отслеживания нажатия на ссылки и получения URL этой самой ссылки.

В CppWebBrowser есть событие OnBeforeNavigate2, один из параметров которого содержит URL. Событие возникает после нажатия на ссылку и до перехода на нее.
Примеры поищите с помощью поиска по слову CppWebBrowser.

Вернуться в Вопросы программирования в C++Builder