-
я вам ничего не предлагаю. я надеюсь, может DVM все-таки подскажет, на какое событие вешать, так как уже определили, что beforeNavigate2 не подходит.
-
> каким образом тогда отделять мух от котлет, если неизвестно > какие адреса реклама, а какие не реклама?
Дело не в рекламе. Дело в том, что ты пытаешься изменить правильное поведение браузера на заведомо неправильное. Браузер следут тому, что указано в параметрах ссылки - в новом окне, значит в новом, в текущем, значит в текущем. Ты же делаешь так, что при любом переходе по ссылке (а обновление баннера во фрейме с помощью джаваскрипта это тоже переход) ты всегда пытаешься создать новое окно. Вот и получается ерунда.
> получается это событие не подходит...
подходит оно, подходит.
-
> так как уже определили, что beforeNavigate2 не подходит
Где и кто это определил, кроме тебя самого в [20] ?
-
ладно, как тогда обработать для моей задачи щелчок по ссылке в браузере если не заморачиватся с событием beforeNavigate2?
-
> ivanov (22.05.08 14:37) [23]
Щелчок понятие растяжимое. Пример: при клике мышкой по некоторой картинке, которая не является ссылкой, браузер, благодаря скрипту на JavaScript или ActiveX или Flash или Java или .... уходит по некой ссылке. Или сам по себе, без клика по той же причине.
beforeNavigate2 возникнет, а вот ссылки и не было никакой.
Это гиблый подход.
-
> а вот ссылки и не было никакой.
точнее клика по ссылке <a href>...</a>
-
шелчок по гиперссылке (напр. <a href="www.ssilka.com">ssilka</a>) как обработать?
-
> шелчок по гиперссылке
Никак. Можно лишь понять что браузер собрался в путь по какой-то гиперссылке и разрешить/запретить ему это или поменять что-то во флагах перед навигацией.
Чудак-человек, пойми, что кликать можно не только по ссылкам. А вот при переходе всегда ссылка будет.
-
-
> а может можно через метод onclick объектной модели документа?
Так это клик вообще, а не по ссылке. К тому же я уже говорил, что браузер мождет перейти по ссылке и без кликов вообще.
-
значит задача не решаема. жаль.
-
> ivanov (23.05.08 11:14) [30] > значит задача не решаема.
А зачем это все нужно в конечном итоге? Ты бы рассказал - может другое решение есть.
-
вкратце: есть один форум. у него неизменяемый дизайн (скажем красный). это с течением времени сильно напрягло глаза и мозг. решил сделать специально под него клиент (дизайн - вовсе не единственная причина написания программы) в котором могу подключить свой CSS. идея простая, на винте лежит файл CSS, в ктором прописаны те цвета, кот я хочу. программа при загрузке страницы подключает мой css вместо ихнего, и показывает в webbrowser форум с красивыми цветами. :) все довольны, и форум и я. но есть одна проблема, люди на форуме в тредах дают ссылки на другие сайты, и когда переходишь по такой ссылке часто (но не всегда) лезут ошибки. эти ошибки объясняются просто - попытка использования файла стилей, который к данной странице не подходит. этим и обусловлена задача отделения одних ссылок от других, с тем, чтобы "чужие" ссылки открывались в новом окне дефолтного браузера, и мой файл стилеj к нему отношения не имел. как говоритса "с глаз долой - из сердца вон"
а можно чтоб здесь не размазывать кашу вам на мыло написать. к тому-ж не хочется адрес в паблик светить.
-
> этим и обусловлена задача отделения одних ссылок от других, > с тем, чтобы "чужие" ссылки открывались в новом окне дефолтного > браузера, и мой файл стилеj к нему отношения не имел.
Дык не подключать свой файл стилей к тем страницам которые не содержат адреса форума. Т.е. перед навигацией на страницу ты должен смотреть, если в URL адрес форума, если есть - подключай свой файл стилей, если нет - не подключай.
> а можно чтоб здесь не размазывать кашу вам на мыло написать. >
Обсуждение лучше все же здесь, это может быть кому то еще интересно окажется.
-
> если есть - подключай свой файл стилей, если нет - не подключай.
делал. проблема в том, что при проверке старый цвет лезет.
-
> проблема в том, что при проверке старый цвет лезет.
Что значит лезет? Момент проверки он в BeforeNavigate как там может что-то лезть? Давай код, в котором лезет, на примере, скажем, этого сайта.
Вообще, если все же открывать в новые окна, наверное получится так:
1) В BeforeNavigate смотрим по флагам в новом или не в новом окне собралась открываться страница. 2) Если в новом - нехай открывается как есть - скорее всего это внешняя ссылка. 3) Если не в новом, то смотрим адрес форума в URL содержится или нет. Если содержится, то меняем таблицу стилей, если не содержится - не меняем.
-
вот когда по ссылкам переходить, видно, что старый дизайн на некоторое время появляется.
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/http://pda.delphimaster.net/?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;
-
в посте 36 опечатка. в функции updatestyle2 вместо
(pos('www.delphimaster.ru', s) > 0)
нужно
(pos('www.delphimaster.ru', fs) > 0)
-
> ivanov (23.05.08 18:53) [37]
По-моему вот так все нормально работает. По форуму фон красный, по остальным ссылкам стандартный:
procedure tform1.updateStyle2(fs: string);
var
s: string;
begin
s := 'file:///c:/my.css';
if (pos('www.delphimaster.ru/cgi-bin/http://pda.delphimaster.net/', fs) > 0) then
begin
if (webbrowser1.Document <> nil) then
webbrowser1.OleObject.Document.styleSheets.Item(0).href := s;
end;
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
updatestyle2(URL);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('http://www.delphimaster.ru/cgi-bin/http://pda.delphimaster.net/?n=4');
end;
В my.css все то же, что у форума delphimaster, только исправил: body, td, ol, ul, li, p { font: 10pt Verdana, Arial, Helvetica, Tahoma, sans-serif; background-color: red; }
-
можно без файла стилей проверить, он не нужен. так вот, событие ondocumentcomplete наступает когда документ загрузился, и на него замену стиля вешать конечно нужно, но уже как-бы поздно, т.к. пока документ грузится, мелькает старый дизайн. если-бы эта прога была только для меня, тут этой ветки бы не было, я бы и с мельканием смирился. идеальным вариантом является событие onbeforenavigate2, но тут проблема что под чужие страницы свой стиль подсовывать не кошерно выходит. вообщем, как я понял мой вопрос решению не подлежит, не буду толочь воду в ступе. спасибо за участие.
|