Конференция "Сети" » открыватьчужие ссылки в новом окне?
 
  • ivanov (19.05.08 11:53) [0]
    есть страница, http://moj.com
    на этой странице несколько ссылок, некоторые из них вида
    http://moj.com/thread.html,
    другие же вида http://drugoj.com/
    для работы используется компонент TWEbbrowser
    как сделать чтобы по клику на ссылке те, которые http://moj.com открывались в этом-же окне, а все другие чтобы в новом окне?
    как сделать проверку строки - я знаю,:

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

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

    else

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

  • ЮЮ © (19.05.08 12:18) [1]
    Открываем новый экземпляр формы с TWEbbrowser-ом на борту.
  • ivanov (19.05.08 13:52) [2]

    > Открываем новый экземпляр формы с TWEbbrowser-ом на борту.


    в смысле это как, подробнее можно?
    и в каком событии это делать?
  • ivanov (19.05.08 13:54) [3]
    а открыть в браузере который в системе по дефолту стоит никак нелзя?
  • DVM © (19.05.08 15:22) [4]

    > а открыть в браузере который в системе по дефолту стоит
    > никак нелзя?

    можно
  • ivanov (19.05.08 15:37) [5]

    > можно

    а как именно?
    сохранять урл на винт и запускать через shellexecute?
    на какое событие  вешать?
  • ivanov (21.05.08 08:00) [6]
    ауу! что дальше общих фраз дело не пойдет?
    ну, как всегда...
  • DVM © (21.05.08 16:48) [7]

    > а как именно?

    ShellExecute.


    > сохранять урл на винт и запускать через shellexecute?

    Зачем сохранять? Как параметр передавать.
  • ivanov (21.05.08 17:48) [8]
    так, хочу код :)
    дело в том, что я пробовал через shellexcute, не работает
    и еще важно, на какое событие браузера это дело повесить?
  • Сергей М. © (21.05.08 19:44) [9]

    > хочу код


    "Иванов на остановке, в ожиданьи кружки пива, в предкушеньи колесницы .." (С) БГ

    Какой тебе еще код ?

    Создавай новый экз-р TWEbbrowser и вызывай его метод Navigate
  • ivanov (22.05.08 10:56) [10]
    итак,резюме:
    открыть ссылку в браузере по дефолту через shellexecute не выйдет, разве что сохранять ее как файл *.url, но это к "мастерству" никакого отношения не имеет, а также - изврат.
    создавать новый экземпляр формы с браузером - меня не устраивает такое решение.
    к сожалению в который раз убедился, что "мастера" когда доходит до относительно сложных вопросов помочь ничем, кроме как напыщено заявлять "можно", "нельзя" не могут.
    печально.
  • DVM © (22.05.08 11:05) [11]

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

    Все выйдет еще как. Ты не пробовал в командной строке набирать:

    C:\Program Files\Internet Explorer>iexplore.exe www.google.ru ???

    Попробуй, удивишься.
  • DVM © (22.05.08 11:20) [12]

    > ivanov

    Между прочим, при клике в TWebBrowser по ссылке, в теге которой указано "Открывать в новом окне" все прекрасно открывается в новом окне браузера. Если же ты хочешь ВСЕ ССЫЛКИ открывать в новом окне, то, очевидно, ShellExecute тебе в помощь.


    > ivanov   (21.05.08 17:48) [8]
    >
    > так, хочу код :)
    > дело в том, что я пробовал через shellexcute, не работает

    Может покажешь как ты пробовал? Или ты и не пробовал вовсе?


    > и еще важно, на какое событие браузера это дело повесить?

    OnBeforeNavigate2.
  • ivanov (22.05.08 12:12) [13]
    procedure tform1.Button2Click(Sender: TObject);
    var flags: OleVariant;
    begin
    flags := 0;
    webbrowser1.Navigate('http://mail.ru', flags);
    end;

    procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
     Headers: OleVariant; var Cancel: WordBool);
     var s, n: string;
     p: pchar;
    begin
     s := 'mail.ru';
     n := url;
     p := pchar(n);
    cancel := false;
    if (pos(s, url) <= 0) then begin
      shellexecute(handle, 'open', p, ' target=_blank', nil, sw_shownormal);
      cancel := true;
     end;
    end;



    вот пожалуста.
    куча рекламных окон.
  • Сергей М. © (22.05.08 12:26) [14]

    >
    > вот пожалуста.
    > куча рекламных окон.
    >


    Что написал, то и получил, чему ж тут удивляться)
  • ivanov (22.05.08 12:55) [15]

    > Что написал, то и получил, чему ж тут удивляться)


    ???
    что конкретнo здесь не правильно?
  • DVM © (22.05.08 13:31) [16]

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

    Конкретно надо отделять мух от котлет в OnBeforeNavigate2. Это событие возникает чаще, чем ты думаешь, особенно на навороченных страницах с баннерами во фреймах и.т.д.
  • ivanov (22.05.08 14:03) [17]
    так вы же сами написали в пост #12.
    каким образом тогда отделять мух от котлет, если неизвестно какие адреса реклама, а какие не реклама?
    получается это событие не подходит...
  • Сергей М. © (22.05.08 14:20) [18]

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


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


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


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

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

    function IsReklama(URL: String): Boolean;

    которая сделает это сама ?
  • Сергей М. © (22.05.08 14:25) [19]

    > ivanov


    И вообще - если вся эта твоя хитромудрая затея сводится к необходимости блокировать запросы к нежелательным ресурсам, то реализуется все то гораздо проще: браузеру указывается прокси-сервер с требуемой функциональностью, который настраивается требуемым образом.
 
Конференция "Сети" » открыватьчужие ссылки в новом окне?
Есть новые Нет новых   [134432   +19][b:0][p:0.001]