Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TWebBrowser портит ссылки в коде страницы


Автор: Pcrepair 25.2.2012, 18:09
Добрый день
есть общеизвестный код вывода закачанного кода ХТМЛ-страницы при помощи TWebBrowser (RAD2010)

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  URL, Flags, TargetFrameName, PostData, Headers: Olevariant;
  MS : String;
begin
  URL := Edit1.Text;
  Flags := 0;
  TargetFrameName := 0;
  Postdata := 0;
  Headers := 0;
  WebBrowser1.Navigate(URL, Flags, TargetFrameName, PostData, Headers);
  repeat
    Application.ProcessMessages;
  until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
  if WebBrowser1.Document <> nil then
  MS := (WebBrowser1.Document as IHTMLDocument2).body.innerhtml;
  begin
      Memo1.Clear;
      Memo1.Text := MS;
    end;
end;
initialization
Set8087CW($133F);


Код позволяет вывести в МЕМО код страницы после обработки ЖАБА-скриптов. однако при этом искажаются ссылки.
Код страницы, закачанный idHTTP (только ссылки)
<a href="http://mail.yandex.ru"onclick="c(this,17,1080)">Войти&nbsp;в&nbsp;почту</a>
<a href="http://www.yandex.ru" onclick="c(this,17,1083)">Яндекс</a>
<a href="http://www.artlebedev.ru" onclick="c(this,17,1084)">Студия Артемия&nbsp;Лебедева</a>
Код страницы, закачанный TWebBrowser
<A onclick=c(this,17,1080) href="http://mail.yandex.ru">Войти&nbsp;в&nbsp;почту</A>
<A onclick=c(this,17,1083) href="http://www.yandex.ru">Яндекс</A>»</P>
<A onclick=c(this,17,1084) href="http://www.artlebedev.ru">Студия Артемия&nbsp;Лебедева</A>
Вопрос:
что нужно изменить в коде, чтобы ссылки не портились, конечно если это возможно
Всем ответившим спасибо.

Автор: Чучмек 25.2.2012, 21:29
А что не так?

Автор: Чучмек 25.2.2012, 22:28
Если нужен исходный код страницы -
Код


var
 prsi: IPersistStreamInit;
 ms:tmemorystream;  //tfilestream //tstringstream
 sa:TStreamAdapter;
 ch:char;


begin
ms:=tmemorystream.Create;
sa:=TStreamAdapter.Create(ms);


prsi:=  WebBrowser1.Document as  IPersistStreamInit;
ms.Seek(0,0);
prsi.Save(sa as istream,true);
ch:=#0;
ms.Write(ch,sizeof(ch));

memo1.text:=pchar(ms.Memory);

Автор: Pcrepair 25.2.2012, 22:36
этот код как то стыкуется с
Код

WebBrowser1.Navigate(URL, Flags, TargetFrameName, PostData, Headers);
  repeat
    Application.ProcessMessages;
  until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
  if WebBrowser1.Document <> nil then

он сможет заменить
Код

MS := (WebBrowser1.Document as IHTMLDocument2).body.innerhtml;

Автор: Чучмек 25.2.2012, 22:43
Цитата(Pcrepair @  25.2.2012,  22:36 Найти цитируемый пост)
этот код как то стыкуется с

Нет WebBrowser1.Document нет и IPersistStreamInit

Цитата(Pcrepair @  25.2.2012,  22:36 Найти цитируемый пост)
он сможет заменить

Он сможет заменить Правая кнопка -> исходный код страницы
Он не даст того, что накуролесили скрипты

Добавлено через 4 минуты и 28 секунд
Цитата(Pcrepair @  25.2.2012,  22:36 Найти цитируемый пост)
 repeat
    Application.ProcessMessages;
  until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;

У TWebBrowser есть очень полезные события - OnDocumentComplete, OnDownloadComplete

Автор: Pcrepair 26.2.2012, 08:29
события очень,  очень полезные
только нестабильно определяют момент окончания загрузки
а 
Код

until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;

определяет однозначно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)