Форум: "Основная";
Текущий архив: 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¶m=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.007 c