Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизПросмотр html содержимого без создания файла Найти похожие ветки
← →
Alexander Vasjuk (2003-12-10 18:04) [0]Никто не помнит как без временных файлов запускать браузер, отображающий сгенерированную в виде строки страницу?
← →
VictorT (2003-12-10 18:19) [1]Не знаю, как это делается в Дельфях, но как обходной путь, можно попробовать использовать файл в памяти.
← →
DiamondShark (2003-12-10 18:35) [2]Есть два пути: получить интерфейс документа, у него запросить IPersistStreamInit и через него загрузить.
Либо написать свой Asynchronous Pluggable Protocol.
← →
Игорь Шевченко (2003-12-10 18:39) [3]Dynamic HTML
Пример в статье Тенцера (Яндекс)
← →
nikkie (2003-12-10 18:39) [4]about:text
← →
Alexander Vasjuk (2003-12-10 18:54) [5]nikkie © (10.12.03 18:39) [4]
Вот что-то такое помню, но не получается.
Пожалста, подробности!
← →
nikkie (2003-12-10 19:08) [6]какие подробности? открываешь браузер и пишешь адрес:
about:<html><body><h1>text</h1></body></html>
← →
VictorT (2003-12-10 19:13) [7]
> какие подробности? открываешь браузер и пишешь адрес:
> about:<html><body><h1>text</h1></body></html>
Не работает.
← →
Иван Шихалев (2003-12-10 19:15) [8]
javascript:document.writeln("<html><body><h1>text</h1></body></html>");
← →
nikkie (2003-12-10 19:20) [9]>Не работает.
сочуйствую. вот еще один собрат по несчастью:
http://delphimaster.net/view/1-1070457447/
ну разбирайтесь, почему у вас не работает...
работать должно, см. ID: Q183978 в MSDN Knowledge Base.
← →
Alexander Vasjuk (2003-12-11 12:32) [10]nikkie © (10.12.03 19:20) [9]
Поставил IE 6.0 SP1
Просто из адреса не заработало
Может, все таки Navigate только?
← →
SergP (2003-12-11 14:33) [11]
> nikkie © (10.12.03 18:39) [4]
> about:text
Это конечно работает, но если text > приблизительно 2кб, оно его урезает до приблизительно 2 кб.
Сам напоролся на эту фигню и долго не мог понять почему у меня страничка в браузере обрезаная...
Лучше делать так:
WB:TWebBrowser;
...
procedure TForm1.WBLoad(HTMLstring:string);
var
v: Variant;
HTMLDocument: IHTMLDocument2;
begin
HTMLDocument := WB.Document as IHTMLDocument2;
v := VarArrayCreate([0, 0], varVariant);
v[0] := HTMLString;
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;
end;
и в uses нужно добавить, не помню точно но вроде бы activex, но это кому нужно пусть сам найдет...
← →
Alexander Vasjuk (2003-12-11 14:54) [12]Вот нарыл вроде работает
procedure TForm1.Button1Click(Sender: TObject);
var
V: OleVariant;
begin
V := CreateOleObject("InternetExplorer.Application");
V.Visible := True;
V. Document.Body.InnerHTML := "<html><head></head><body><h1>Hello, World!</h1></body></html>";
end;
← →
Dimka Maslov (2003-12-11 15:31) [13]http://delphibase.endimus.com/?action=viewfunc&topic=netbrowse&id=10121
← →
Alexander Vasjuk (2003-12-11 15:50) [14]Dimka Maslov © (11.12.03 15:31) [13]
Интересует не TWebBrowser а именно Internet Explorer.
← →
nikkie (2003-12-11 16:28) [15]Тем у кого не работает протокол about я, к сожалению, ничем помочь не могу. У меня он работал на всех версиях IE4-5-6. about:blank у всех, наверное, работает. Опять же и Микрософт говорит, что работать должен. Хотя было бы интересно узнать, в чем там затык.
На счет ограничения в 2K охотно верю. Более того, проверил - у меня похоже ограничение 508 символов. Странное число, но если url, начинающийся с about: длиннее 508 символов, то ничего не происходит.
Вариант с использованием PSafeArray - это просто калька с общепринятого кода на c++. Лично я предпочитаю в данном случае пользоваться поздним связыванием, код получается проще в стиле vb:
var
Doc: OleVariant;
begin
Doc := WB.DefaultInterface.Document;
Doc.write(...);
Doc.write(...);
Doc.close;
end;
Кроме того, использование WB.Document приводит к утечкам памяти, упоминание об этом есть в статье Игоря Осов"яка на королевстве. Здесь на форуме он как-то объяснял причину этой утечки - баг в vcl. Безопасный способ - использование WB.DefaultInterface.Document или WB.ControlInterface.Document.
Делать как в [12]
Document.Body.InnerHTML := "<html><head></head><body><h1>Hello, World!</h1></body></html>";
по крайней мере, не очень логично. Body.InnerHTML - это содержимое body-тега. Не проверял, но по идее хедер и аттрибуты body так задать не получится.
Наконец, весь разговор был пока только о простых html-страницах. Если требуется показать html-старницу со ссылкой на другой ресурс (например, фрейм или картинку), причем этот ресурс тоже нужно подсунуть динамически без сохранения в файл, то есть два пути - Asynchronous Pluggable Protocol, упомянутый в [2], или написание своего веб-сервера. Вероятно, второй путь даже проще и работать будет с произвольным браузером, а не только с IE.
← →
nikkie (2003-12-11 16:30) [16]>Интересует не TWebBrowser а именно Internet Explorer.
разницы особой нет - объектная модель документа одна и та же. а как достучаться до документа в IE - ты сам привел код.
← →
SergP (2003-12-11 22:34) [17]
> На счет ограничения в 2K охотно верю. Более того, проверил
> - у меня похоже ограничение 508 символов. Странное число,
> но если url, начинающийся с about: длиннее 508 символов,
> то ничего не происходит.
Ну 2K - это я приблизительно сказал. На самом деле это число к тому же меняется непонятно отчего. У меня в разных случаях были ограничения от 1900 с мелочью байт до 2100 с мелочью. Но при просмотре содержимого странички (правая кнопка/просмотр в виде HTML) закрывающий тег </html> в конце стоит, а вот обрезано то что до него...
← →
Soft (2003-12-12 02:42) [18]А чем плохо поднять собственный Web-сервер на машине через компоненты Indy? И на лету генерировать html, по передаваемым параметрам. Неужели сложно?
А из IE обращатся так:
http://127.0.0.1/my.html
ЗЫ
Поднять протоколы!!!Открыть порты!!!Мы отправляемся в плавание:)
← →
Alexander Vasjuk (2003-12-12 13:07) [19]Alexander Vasjuk (11.12.03 14:54) [12]
nikkie © (11.12.03 16:28) [15]
Body.InnerHTML - это содержимое body-тега. Не проверял, но по идее хедер и аттрибуты body так задать не получится.
Согласен. Стили приказали долго жить.
Более того.
При обновлении страницы всплывает старая. (без старой вообще ничего не работает, т.к. document начинает существовать после navigate).
Просмотр в виде HTML тоже дает старый код.
Можно было бы и не обновляться и не смотреть исходник, но лично в моем случае нужно еще и редактировать.
Экспорт такой страницы не работает.
А при включении режима редактирования опять вылазит старая страница :(
А по поводу about: <bla>bla-bla-bla</bla>
Я пробовал на разных машинах - там где новые IE (XP, 2003, 2000 + ie60sp, 98 + ie60sp1) - не работает about.
А на одной двушке с родным ie - работает.
Похоже, в новых версиях убрали эту фичу.
У кого как?
← →
nikkie (2003-12-12 15:55) [20]>При обновлении страницы всплывает старая.
неудивительно. адрес страницы остался ведь старым... можно попробовать прицепиться к событиям браузера и при обновлении страницы заново записывать туда свою. а потом встанет вопрос, что делать с навигацией...
>Просмотр в виде HTML тоже дает старый код.
насколько я понимаю, в этом случае IE берет страницу из кэша.
короче, нормальных решения 2 - APP и свой сервер.
по поводу about: - у меня работает на Win98+IE4.72sp1, Win2000+IE5.0sp3, Win2000+IE6.0 - ну разве что еще на IE6 sp поставить.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.01 c