Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
3-11773
MegaDen
2003-12-09 19:24
2004.01.05
DBGrid


14-12077
Undert
2003-12-15 15:00
2004.01.05
MySql_Запрос


14-12032
Думкин
2003-12-14 05:46
2004.01.05
С днем рождения! 14 декабря.


1-11972
Andrey V.
2003-12-19 12:48
2004.01.05
Досовская задача в CreateProcess


1-11894
snake1977
2003-12-18 12:56
2004.01.05
MDIChild в DLL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский