Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.29;
Скачать: CL | DM;

Вниз

TWebBrowser   Найти похожие ветки 

 
_Dmitry_   (2004-01-16 11:17) [0]

Очень нужна ваша помощь
Я динамически создаю HTML страницы и подгружаю их в TWebBrowser
Вот такой функцией

procedure TEditorForm.TextToWebBrowser(Text:string);
var
StreamSTR:TStringStream;
begin
StreamSTR := TStringStream.Create(Text);
StreamSTR.seek(0, 0);
if WB.Document = nil then WB.Navigate("about:blank");
while WB.Document = nil do Application.ProcessMessages;
(WB.Document as IPersistStreamInit).Load(TStreamAdapter.Create(StreamSTR));
StreamSTR.Free;
end;


Все прекрассно кроме одного: ссылки не работают по простой причине что браузер считает текущей страницей - "about:blank".
соотв. если имеется ссылка на xxx.html то это трансформируется на "about:blankxxx.html" :(

Есть ли подменить "about:blank" на какой нибудь другой путь без его явной загрузки?

Вариант указания полного пути в ссылке мне не подходит.


 
YuRock ©   (2004-01-16 11:31) [1]

WB.Navigate(" http://www.opera.com")


 
_Dmitry_   (2004-01-16 11:48) [2]

YuRock,
В этом случае будет происходить загрузка http://www.opera.com
А мне нужно просто подменить а не загружать.


 
Styx   (2004-01-16 15:45) [3]

Можно в HTML добавлять тэг <BASE HREF="...">. Тогда будет работать. Только, по опыту, не советую грузить документы из потока - в некоторых случаях браузер показывает HTML source вместо странички... Обходится это через APP...
Читаем:
http://talk.mail.ru/forum/talk.ru.delphi.webbrowser
http://groups.yahoo.com/group/delphi-webbrowser/


 
_Dmitry_   (2004-01-16 17:57) [4]

Styx,
Нет возможности конттролировать что будет в HTML, его должен формировать сам пользователь.


 
Ломброзо ©   (2004-01-16 18:08) [5]

1) При формировании документа-строки вставляй свои URL призвольного формата. Все нужные параметры допсиывай в QueryString, навроде
myprotocol://myprog.exe/?document=123&param=2
2) Напиши свой класс парсинга URI расширив API функцию InternetCrackUrl
3) Подвязавшись к событийному интерфейсу HTMLDocument перехватывай клик на IHTMLAnchorElement, получай его href, разбирай параметры, в зависимости от них формируй новый документ.и грузишь его в броузер.

Очень гибкий и удобный механизм.


 
Ломброзо ©   (2004-01-16 18:08) [6]

Ого. Баг форума. Амперсанд не прорисовывается.
тест
&&&


 
_Dmitry_   (2004-01-16 18:40) [7]

Хорошо,
я кажется нашел решение

Нужно отлавливать момент когда юзер нажимает на линк подменить его на свое значение. По документации для этого юзаю OnBeforeNavigate2


procedure TEditorForm.WBBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
URL := " http://localhost/xxx.htm";
end;


Событие срабатывает но подменить URL не удается :(
Может быть у меня руки кривые? В документации же ясно сказано:


URL is the Uniform Resource Locator of the resource the Web browser is looking up. Change this value to redirect the navigation operation to a different resource.


Что я делаю не так?


 
Ломброзо ©   (2004-01-16 18:51) [8]

Я об этом и говорил.
О броузере неплохо написано на delphikingdom.com в статье Игоря Осовяка. Клик на линке можно отловить только подписавшись на события. К событиям IE можно подвязываться при помощи IConnectionPointCOntainer - IConnectionPoint::Advise, написав наследника от IDispatch и перегрузив метод Invoke, в котором анализировать искомый dispid метода событийного интерфейса (onclick, onmousedown и т.п.; dispid ы можно посмотреть в tlb библиотеки mshtml.dll)


 
_Dmitry_   (2004-01-16 22:01) [9]

Ломброзо,
Спасибо почитал. Но чесно говоря так и не приблизился к решению.
У Игоря О. описание хорошее но очень поверхностное. Это совершенно не обьясняет почему BeforeNavigate2 не работает как описано в документации, или как это обойти.

Судя по вашем посту Вы знаете о чем идет речь. Не могли бы Вы подробнее расписать порядок действий.
Спасибо.


 
Ломброзо ©   (2004-01-16 22:16) [10]

Отчего же, мог бы.

http://lombrozo.pochta.ru/zip/Ready.zip

в архиве моя маленькая статейка и туториал.


 
Ломброзо ©   (2004-01-16 22:22) [11]

примитивный классик для парсинга URL положил рядом
CGI.pas


 
nikkie ©   (2004-01-17 00:24) [12]

>Ломброзо
по поводу статьи - тебе не кажется, что требования к читателю чересчур суровы? ;)


 
Ломброзо ©   (2004-01-17 00:37) [13]

Не хотите - не читайте! хотя... Вы правы, и я вынуж#ден признать - покойник действительно про себя полагал, что статья вы#лядит как выкидыш.



Страницы: 1 вся ветка

Текущий архив: 2004.01.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-93476
_dEMOn
2004-01-15 20:46
2004.01.29
ListBox.Items


1-93455
ИМХО
2004-01-16 07:21
2004.01.29
Большой список строк


3-93358
_Yanchik
2004-01-02 21:50
2004.01.29
Date, Now SQL server


14-93659
Конь
2004-01-06 12:28
2004.01.29
Батон


7-93714
Morgan128
2003-11-12 01:18
2004.01.29
Распознание текста