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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2011, 19:42   #1
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию Как запретить переходы по ссылкам?

Доброе время суток форумчане. Кто знает, как в CppWebBrowser запретить все переходы на загруженной в него Web странице?
Пробовал вот так:

Код:
void __fastcall TMainForm::CppWebBrowser1NewWindow2(TObject *Sender,
      LPDISPATCH *ppDisp, TOLEBOOL *Cancel)
{
bool flag = false;
*Cancel = TOLEBOOL(flag);
}
ни чего не получается, может кто подскажет?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.03.2011, 23:45   #2
GreyScall
Пользователь
 
Аватар для GreyScall
 
Регистрация: 01.01.2011
Сообщений: 29
По умолчанию

OnNewWindow2 - это когда страница пытается открыть ссылку в новом окне...
А при переходах вызывается OnBeforeNavigate2, там тоже Cancel есть...

Как пример:
Код:
Procedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject; Const pDisp: IDispatch; Var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; Var Cancel: WordBool);
Begin
If Pos('yandex', LowerCase(URL))=0 Then
      Begin
      Cancel:=True;
      MessageBox(Form1.Handle, PChar('Заблокирован переход по ссылке:'#13#10#13#10+String(URL)), 'Warring!', MB_OK Or MB_ICONWARNING);
      End;
End;
Regards, GreyScall.
GreyScall вне форума Ответить с цитированием
Старый 20.03.2011, 17:16   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Если я делаю вот так:

Код:
void __fastcall TMainForm::CppWebBrowser1BeforeNavigate2(TObject *Sender,
      LPDISPATCH pDisp, TVariant *URL, TVariant *Flags,
      TVariant *TargetFrameName, TVariant *PostData, TVariant *Headers,
      TOLEBOOL *Cancel)
{
bool flag = true;
*Cancel = TOLEBOOL(flag);
}
то выдаються последовательно такие сообщения:
Изображения
Тип файла: jpg Screen.jpg (10.9 Кб, 76 просмотров)
Тип файла: jpg Screen1.jpg (7.6 Кб, 73 просмотров)
Тип файла: jpg Screen2.jpg (11.1 Кб, 78 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.03.2011, 09:23   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Доброе утро форумчане.
Что, никто с такой задачкой не сталкивался?
Как всё-таки запретить переход по ссылкам?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 21.03.2011 в 10:53.
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.03.2011, 17:49   #5
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
Как всё-таки запретить переход по ссылкам?
Вот пример кода
Код:
void __fastcall TForm4::CppWebBrowser1BeforeNavigate2(TObject *Sender,
	  LPDISPATCH pDisp, Variant *URL, Variant *Flags, Variant *TargetFrameName,
	  Variant *PostData, Variant *Headers, VARIANT_BOOL *Cancel)
{

	String url=*URL;

//====блокируем ссылку, в которой встречается слово "yandex"

	if (strstr(url.c_str(),"yandex") != NULL ) {

		*Cancel = TRUE;

		MessageBox(NULL,"Заблокирован переход по ссылке","Warning",MB_OK);

	}

}
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 22.03.2011, 06:32   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Запрет по выборочным ссылкам я в гугле нашёл. А как запретить все переходы?
Или это не возможно?
В принципе, можно загрузить страницу в TStringList и вычистить все href, потом сохранить страницу на диске и локально загрузить в WebBrovser.
Но может есть более стандартный путь?

Да, наверное я немного не корректно поставил вопрос.
Надо, что-бы сама страница выводилась, а переходы по ссылкам на ней не работали.
Вышеприведённый способ блокирует загрузку страницы.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 22.03.2011 в 06:40.
Smitt&Wesson вне форума Ответить с цитированием
Старый 23.03.2011, 00:46   #7
GreyScall
Пользователь
 
Аватар для GreyScall
 
Регистрация: 01.01.2011
Сообщений: 29
Лампочка

Установка Cancel:=True; в BeforeNavigate2 блокирует переходы на другие страницы... Полностью... То есть CppWebBrowser1.Navigate() также будет блокироваться...

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
В принципе, можно загрузить страницу в TStringList и вычистить все href, потом сохранить страницу на диске и локально загрузить в WebBrovser.
Не нужно сохранять в файл, можно загружать страницу в CppWebBrowser прямо из памяти... Да вот загвоздка - ссылки могут быть не только в href...
Проще сделать флагом - блокировать или нет...

А ошибки на ваших скриншотах какие-то странные... Какая у вас версия Билдера?
Проверьте, будут ли ошибки в пустом проекте...



Установил «Borland C++ Builder Enterprise 6.0», написал так:

Код:
bool Block_Navigate=false;
bool Block_NewWindow=false;

void __fastcall TForm1::CppWebBrowser1NewWindow2(TObject *Sender, LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
*Cancel=Block_NewWindow;
}

void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender, LPDISPATCH pDisp, Variant *URL, Variant
                *Flags, Variant *TargetFrameName, Variant *PostData, Variant *Headers, VARIANT_BOOL *Cancel)
{
*Cancel=Block_Navigate;
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Block_NewWindow=true;
CppWebBrowser1->Navigate(Variant("http://ya.ru"));
Block_Navigate=true;
}
Всё работает...
Regards, GreyScall.
GreyScall вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проследить по каким ссылкам идет переход misher Свободное общение 7 14.10.2010 20:02
Как запретить кэширование страниц? sunplant HTML и CSS 1 26.09.2010 20:15
Как запретить пробел eregi emeraudx PHP 2 18.06.2010 15:44
Немогу сделать переходы назад по ссылкам solanto HTML и CSS 14 16.11.2009 10:07
как запретить раскрытие формы Анастасия123456789 Помощь студентам 3 21.04.2009 11:53