Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват URL в TWebBrowser 
:(
    Опции темы
Borland_Delphi_6
  Дата 30.3.2005, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



В WebBrowser есть событие OnNewWindow2, но этой процедуре вроде бы не передается URL открываемой страницы. Так вот, можно ли его как-нибудь узнать (нужно для организации вкладок)?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Snowy
Дата 30.3.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11292
Регистрация: 13.10.2004
Где: Питер

Репутация: 4
Всего: 477



Сначала создавай закладку, а потом, когда страничка подгрузится (OnDocumentComplete), переименовывай.
Лучше даже будет на закладку класть не линк, а заголовок странички (как в Opera)

PM MAIL   Вверх
Borland_Delphi_6
Дата 31.3.2005, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Snowy
Не, ты не понял. Нужно чтобы вкладка создавалась при попытке открытия ссылки в новом окне (target="_blank"). Но для этого мы должны знать URL нового окна. А его я как раз и не знаю! Вот как его можно узнать (и можно ли...)?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
December
Дата 1.4.2005, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



OnBeforeNavigate может тебе помочь


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Borland_Delphi_6
Дата 1.4.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Ок, а как узнать, что браузер пытается открыть новое окно?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
December
Дата 1.4.2005, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Первым выстреливает OnNewWindow. Запоминаем в нём ppDisp. Сразу после него срабатывает OnBeforeNavigate с таким же (по идее) ppDisp'om. После обработки этих двух событий мы имеем всю информацию о новом окне.
ЗЫ Не проверял smile
Добавлено @ 23:58
Цитата(Borland_Delphi_6 @ 31.3.2005, 00:49)
Нужно чтобы вкладка создавалась при попытке открытия ссылки в новом окне (target="_blank").

В этом случае можно просто попытаться использовать параметр TargetFrameName у OnBeforeNavigate, однако это оставит дыру если юзер кликнет на ссылке, зажимая клавишу Shift, или из popup-menu к примеру.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Усатый
Дата 14.9.2005, 22:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как быть, если нужно запретить открытие URL в новом окне и принудительно открыть его в том же?
  Вверх
December
Дата 16.9.2005, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Цитата
А как быть, если нужно запретить открытие URL в новом окне и принудительно открыть его в том же?

Скорее всего, так: в событии onNewWindow пишем
Код

ppDisp:=ControlInterface;

Не проверял... Если не работает - маякни, что-нить придумаем.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Усатый
Дата 19.9.2005, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.9.2005

Репутация: нет
Всего: нет



А что значит этот код?
Результат: новое окно не открывается. Но и перехода по ссылке тоже не происходит.

PM MAIL   Вверх
December
Дата 20.9.2005, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Цитата
А что значит этот код?

По идее, аргумент ppDisp является указателем на инстанцию TWebBrowser, в котором должна открыться страница. Ладно, домой приду - разберусь (часов через 9 smile) Завтра выложу код.


--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
December
Дата 2.10.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Не прошло и трёх недель, как руки дошли до этого топика smile
С виду лёгкая задача вылилась в несколько часов сражений с ТВебБродилкой. Выяснилось следующее.
1. Приведённый выше пример таки работает... Когда попытка создать новое окно происходит из некоего вложенного фрейма. По-красивому перенаправить новое окно на самое себя не получается.
2. Задача всё же решаема, хоть и через некоторое шаманство. Для ритуала потребуется дополнительный TWebBrowser. Краткое содержание шаманской песни: при открытии новой отдельной страницы она направляется в запасной бродильник (TWebBrowser2), в котором мы коварно поджидаем события OnBeforeNavigate. В этом событии нам уже доступна информация о урле, флагах, пост-данных etc, и мы смело запускаем Navigate первого (основного) бродильника с этими параметрами. Таинство обряда: чтобы это сработало, надо иметь в запасном бродильнике созданный документ, например, путём навигации на about:blank. Ниже я привожу код, который демонстрирует данную технику. Для его прогона потребуютя Button1, WebBrowser1 и WebBrowser2.
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('www.bugaga.com');
webbrowser2.Navigate('about:blank');
end;

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp:=WebBrowser2.ControlInterface;
end;

procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
if assigned(WebBrowser2.Document) then
  begin
  WebBrowser1.Navigate(URL, Flags, TargetFrameName, PostData, Headers);
  Cancel:=true;
  end;
end;



--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Усатый
Дата 11.10.2005, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.9.2005

Репутация: нет
Всего: нет



Странно... Зацикливается между WebBrowser1NewWindow2 и WebBrowser2BeforeNavigate2 smile
PM MAIL   Вверх
December
Дата 12.10.2005, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Модератор
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 12
Всего: 57



Усатый
Цитата
Странно... Зацикливается между WebBrowser1NewWindow2 и WebBrowser2BeforeNavigate2
Давай код, я посмотрю...



--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
Усатый
Дата 12.10.2005, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.9.2005

Репутация: нет
Всего: нет



Разобрался. Первому браузеру нельзя передавать TargetFrameName, поскольку он указывает на НОВОЕ окно - вот они и гоняют страницу друг другу smile Достаточно передать URL
PM MAIL   Вверх
doneto
Дата 20.11.2017, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.4.2017

Репутация: нет
Всего: нет



а исходный код можно? ( что бы понять - что же все таки надо делать - когда браузер (элемент TWEbBrowser) пытается открыть ссылку в новом окне IE ( т..к. в html- написано ссылку открыть в _blank) - в новом окне... так как же ее перехватить?
PM MAIL   Вверх
Google
  Дата 13.12.2017, 16:08 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0967 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.