![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как загрузить HTML-код в определенный фрейм страницы браузера? [D6, WinXP]
ТехникПТО © (2005-03-12 18:33:00)Есть переменная s в которой содержиться полный хтмл код страницы... его нужно загрузить в определенный фрейм страницы...КАК это сделать?
programania (2005-05-15 22:41:00) [1]>его нужно загрузить в определенный фрейм страницы...
фреймы хранятся в отдельных файлах
туда и записать этот текст
и загрузить повторно основную страницу navigate.
А если ссылка на фрейм ведет в интернет,
изменить ее на локальный файл в тексте загруженом в WB
как описано выше.
SherZod (2005-05-15 22:10:00) [2]Сначало инициализируем пустой документ в TWebBrowser
procedure TForm1.FormCreate(Sender: TObject);
begin
// Инициализируем пустой документ в TWebBrowser
WebBrowser1.Navigate('about:blank');
end;
А патом заружаем строку в TWebBrowser
procedure TForm1.Button1Click(Sender: TObject);
var
Document: IHTMLDocument2;
V: OleVariant;
begin
// Этот метод переписывает в TWebBrowser HTML-
// документ из TMemo
Document := WebBrowser1.Document as IHtmlDocument2;
V := VarArrayCreate([0, 0], varVariant);
V[0] := Memo1.Text;
Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;
end;
Aleksvz (2005-03-22 12:38:00) [3]Народ помогите пожалуйста
Все время пользовался именно таким (приведенным) методом, для загрузки html страниц целиком в WebBrowser. И никогда не было никаких проблем. Но на некоторых компах строка
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
вызывает ошибку обращения к памяти:
"Access Violation at adress XXXXXXXX im module Module_Name.exe Read of adress FFFFFFFF". В описании ошибки говориться, что она возникает при попытке обращения к закрытой области памяти, использование объекта, которому не выделена память, либо осуществляется попытка оичстить память, которая была выделена в другом модуле. Но при чем здесь эта ошибка (именно в этой строке) не могу понять. В чем я не прав и как исправить эту проблему. Заранее спасибо
SergP (2005-03-12 21:40:00) [4]Щас попытаюсь. 135788150
ТехникПТО (2005-03-12 21:39:00) [5]выйдете в асю если есть возможность
ТехникПТО (2005-03-12 21:38:00) [6][Error] Unit1.pas(525): There is no overloaded version of 'Navigate' that can be called with these arguments
Url1:='about:'+s;
Form1.EmbeddedWB1.Navigate(URL,1,Form1.EmbeddedWB1.OleObject.Document.frames.item(3).Document);
SergP (2005-03-12 21:29:00) [7]Открой ИЕ и введи в строку с УРЛОМ вот это:
about:<html>Я%20Вася%20Пупкин</html>
и поймешь....
SergP (2005-03-12 21:27:00) [8]
> так то s это переменная в которой содержиться HTML-код страницы!!!
Ну правильно.
var
URL:string;
...
begin
...
URL:='about:'+s;
Webbrowser.Navigate(URL, ... и остальные параметры...
ТехникПТО (2005-03-12 21:25:00) [9]
> 'about:'+s
так то s это переменная в которой содержиться HTML-код страницы!!!
SergP (2005-03-12 21:24:00) [10]Только если s у тебя большая то браузер может ее "обрезать"
SergP (2005-03-12 21:23:00) [11]
> [2] ТехникПТО © (12.03.05 21:00)
> хм... а URL??? какой?? :(
'about:'+s
ТехникПТО (2005-03-12 21:00:00) [12]хм... а URL??? какой?? :(
SergP (2005-03-12 19:41:00) [13]Не пробовал никогда так делать, но думаю что можно либо через navigate используя протокол about.
procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant);
Только конечно если длина переменной не очень большая, до 1,5-2 Кб
Либо каким-нить другим методом, типа:
procedure TForm1.WBLoad(HTMLstring:string);
var
v: Variant;
HTMLDocument: IHTMLDocument2;
begin
HTMLDocument := WB.Documentas IHTMLDocument2;
v := VarArrayCreate([0, 0], varVariant);
v[0] := HTMLString;
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;
end;
Только вместо этого (WB.Document) указать на документ конкретного фрейма.
не знаю будет ли работать, но мне лень щас с фреймами возиться.