Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

открыватьчужие ссылки в новом окне?


Страницы:   1 2 3

ivanov ©   (2008-05-19 11:53:00) 

есть страница, http://moj.com
на этой странице несколько ссылок, некоторые из них вида
http://moj.com/thread.html,
другие же вида http://drugoj.com/
для работы используется компонент TWEbbrowser
как сделать чтобы по клику на ссылке те, которые http://moj.comоткрывались в этом-же окне, а все другие чтобы в новом окне?
как сделать проверку строки - я знаю,:

if pos(' http://moj.com/', s) > 0 then

//открываем ссылку обычным путем

else

//открываем в новом окне. <--  как реализовать?


ivanov   (2008-05-23 18:53:00) [21]

в посте 36 опечатка.
в функции updatestyle2 вместо

(pos('www.delphimaster.ru', s) > 0)

нужно

(pos('www.delphimaster.ru', fs) > 0)


ivanov   (2008-05-23 18:44:00) [22]

вот
когда по ссылкам переходить, видно, что старый дизайн на некоторое время появляется.


procedure tform1.updateStyle;
var s: string;
begin
s := 'file:///c:/my.css';
if webbrowser1.Document <> nil then
webbrowser1.OleObject.Document.styleSheets.Item(0).href := s;
end;

procedure tform1.updateStyle2(fs: string);
var s: string;
begin
s := 'file:///c:/my.css';
if (pos('www.delphimaster.ru', s) > 0) then begin
 if (webbrowser1.Document <> nil) then
 webbrowser1.OleObject.Document.styleSheets.Item(0).href := s;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Navigate(' http://www.delphimaster.ru/cgi-bin/forum.pl?n=4');
end;

procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
 Headers: OleVariant; var Cancel: WordBool);
begin
updatestyle2(url);
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
updatestyle;
end;


DVM   (2008-05-23 15:27:00) [23]


> проблема в том, что при проверке старый цвет лезет.

Что значит лезет? Момент проверки он в BeforeNavigate как там может что-то лезть? Давай код, в котором лезет, на примере, скажем, этого сайта.

Вообще, если все же открывать в новые окна, наверное получится так:

1) В BeforeNavigate смотрим по флагам в новом или не в новом окне собралась открываться страница.
2) Если в новом - нехай открывается как есть - скорее всего это внешняя ссылка.
3) Если не в новом, то смотрим адрес форума в URL содержится или нет. Если содержится, то меняем таблицу стилей, если не содержится - не меняем.


ivanov   (2008-05-23 14:58:00) [24]


> если есть - подключай свой файл стилей, если нет - не подключай.


делал.
проблема в том, что при проверке старый цвет лезет.


DVM   (2008-05-23 14:42:00) [25]


> этим и обусловлена задача отделения одних ссылок от других,
>  с тем, чтобы "чужие" ссылки открывались в новом окне дефолтного
> браузера, и мой файл стилеj к нему отношения не имел.

Дык не подключать свой файл стилей к тем страницам которые не содержат адреса форума. Т.е. перед навигацией на страницу ты должен смотреть, если в URL адрес форума, если есть - подключай свой файл стилей, если нет - не подключай.


> а можно чтоб здесь не размазывать кашу вам на мыло написать.
>  

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


ivanov   (2008-05-23 12:13:00) [26]

вкратце:
есть один форум. у него неизменяемый дизайн (скажем красный).
это с течением времени сильно напрягло глаза и мозг.
решил сделать специально под него клиент (дизайн - вовсе не единственная причина написания программы) в котором могу подключить свой CSS.
идея простая, на винте лежит файл CSS, в ктором прописаны те цвета, кот я хочу.
программа при загрузке страницы подключает мой css вместо ихнего, и показывает в webbrowser форум с красивыми цветами. :)
все довольны, и форум и я.
но есть одна проблема, люди на форуме в тредах дают ссылки на другие сайты, и когда переходишь по такой ссылке часто (но не всегда) лезут ошибки.
эти ошибки объясняются просто - попытка использования файла стилей, который к данной странице не подходит.
этим и обусловлена задача отделения одних ссылок от других, с тем, чтобы "чужие" ссылки открывались в новом окне дефолтного браузера, и мой файл стилеj к нему отношения не имел.
как говоритса "с глаз долой - из сердца вон"

а можно чтоб здесь не размазывать кашу вам на мыло написать.
к тому-ж не хочется адрес в паблик светить.


DVM   (2008-05-23 11:18:00) [27]


> ivanov   (23.05.08 11:14) [30]
> значит задача не решаема.

А зачем это все нужно в конечном итоге? Ты бы рассказал - может другое решение есть.


ivanov   (2008-05-23 11:14:00) [28]

значит задача не решаема.
жаль.


DVM   (2008-05-23 10:51:00) [29]


> а может можно через метод onclick объектной модели документа?

Так это клик вообще, а не по ссылке. К тому же я уже говорил, что браузер мождет перейти по ссылке и без кликов вообще.


ivanov   (2008-05-23 10:19:00) [30]

странно.  а может можно через метод onclick объектной модели документа?
вот ms пишет, что у ihtmldocument2 есть такой метод http://msdn.microsoft.com/en-us/library/aa752611(VS.85).aspx


DVM   (2008-05-22 14:56:00) [31]


> шелчок по гиперссылке

Никак. Можно лишь понять что браузер собрался в путь по какой-то гиперссылке и разрешить/запретить ему это или поменять что-то во флагах перед навигацией.

Чудак-человек, пойми, что кликать можно не только по ссылкам. А вот при переходе всегда ссылка будет.


ivanov   (2008-05-22 14:47:00) [32]

шелчок по гиперссылке (напр. <a href="www.ssilka.com">ssilka</a>)
как обработать?


DVM   (2008-05-22 14:45:00) [33]


> а вот ссылки и не было никакой.

точнее клика по ссылке <a href>...</a>


DVM   (2008-05-22 14:43:00) [34]


> ivanov   (22.05.08 14:37) [23]

Щелчок понятие растяжимое. Пример: при клике мышкой по некоторой картинке, которая не является ссылкой, браузер, благодаря скрипту на JavaScript или ActiveX или Flash или Java или .... уходит по некой ссылке. Или сам по себе, без клика по той же причине.

beforeNavigate2 возникнет, а вот ссылки и не было никакой.

Это гиблый подход.


ivanov   (2008-05-22 14:37:00) [35]

ладно, как тогда обработать для моей задачи щелчок по ссылкев браузере если не заморачиватся с событием beforeNavigate2?


Сергей М.   (2008-05-22 14:28:00) [36]


> так как уже определили, что beforeNavigate2 не подходит


Гдеи ктоэто определил, кроме тебя самого в [20] ?


DVM   (2008-05-22 14:27:00) [37]


> каким образом тогда отделять мух от котлет, если неизвестно
> какие адреса реклама, а какие не реклама?

Дело не в рекламе. Дело в том, что ты пытаешься изменить правильное поведение браузера на заведомо неправильное. Браузер следут тому, что указано в параметрах ссылки - в новом окне, значит в новом, в текущем, значит в текущем. Ты же делаешь так, что при любом переходе по ссылке (а обновление баннера во фрейме с помощью джаваскрипта это тоже переход) ты всегда пытаешься создать новое окно. Вот и получается ерунда.


> получается это событие не подходит...

подходит оно, подходит.


ivanov   (2008-05-22 14:26:00) [38]

я вам ничего не предлагаю.
я надеюсь, может DVMвсе-таки подскажет, на какое событие вешать, так как уже определили, что beforeNavigate2 не подходит.


Сергей М.   (2008-05-22 14:25:00) [39]


> ivanov


И вообще - если вся эта твоя хитромудрая затея сводится к необходимости блокировать запросы к нежелательным ресурсам, то реализуется все то гораздо проще: браузеру указывается прокси-сервер с требуемой функциональностью, который настраивается требуемым образом.


Сергей М.   (2008-05-22 14:20:00) [40]


> что конкретнo здесь не правильно?


Каждая вызванная тобой ShellExecute стартует отдельный процесс браузера.
Каждый стартованный процесс браузера создает как минимум одно окно.


> каким образом тогда отделять мух от котлет, если неизвестно
> какие адреса реклама, а какие не реклама?


Ты предлагаешь определять это нам ?

Или ты полагаешь, что на свете существует супер-пупер-функция типа

function IsReklama(URL: String): Boolean;

которая сделает это сама ?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо