Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.29;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
14-93640
Семен Сорокин
2004-01-08 15:43
2004.01.29
MapObjects


7-93707
Magical
2003-11-06 18:01
2004.01.29
Работа с правами пользователей


7-93723
explorer
2003-11-14 07:44
2004.01.29
Как прогр. узнать где расположены папки Windows и Prog. Files


9-93325
Филипп
2003-07-14 09:20
2004.01.29
3D коридор


1-93556
-=Mr.Cold=-
2004-01-17 14:47
2004.01.29
Окно как в FlashGet e





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский