Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема отображения изображений в TWebBrowser при загрузке веб-страниц в Delphi

Delphi , Интернет и Сети , Браузер

Пользователи, работающие с компонентом TWebBrowser в среде разработки Delphi, иногда сталкиваются с задачей доступа к изображениям, отображаемым на веб-странице, которые не входят в коллекцию изображений самого браузера. Такая ситуация может возникнуть, например, при загрузке страницы https://www.nbbclubsites.nl/club/8000/uitslagen, где видно, что есть два изображения слева от голубой полосы заголовка.

При использовании кода для подсчета изображений:

procedure TForm1.GetImageCount;
var
  Count : Integer;
  Doc : IHtmlDocument2;
begin
  Doc := IDispatch(WebBrowser1.Document) as IHtmlDocument2;
  Count := Doc.images.length;
  ShowMessageFmt('ImageCount: %d', [Count]);
end;

в сообщении об ошибке отображается счетчик 1, в то время как ожидается 2. Первое изображение можно легко получить и сохранить на диск, но второе и последующие недоступны, так как они не входят в коллекцию Images загруженной страницы.

Решение проблемы

Для доступа ко второму изображению и сохранения его на диск, необходимо учитывать, что оно может быть расположено в iframe. В этом случае, необходимо обрабатывать iframe в событии OnDocumentComplete. Вот пример кода, который демонстрирует, как можно обработать iframe и получить доступ к изображению:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw, MsHtml;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure WebBrowser1DocumentComplete(ASender: TObject;
      const pDisp: IDispatch; const URL: OleVariant);
    procedure FormShow(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  WebBrowser1.Navigate('https://www.nbbclubsites.nl/club/8000/uitslagen');
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject; const pDisp: IDispatch;
  const URL: OleVariant);
var
  currentBrowser: IWebBrowser;
  topBrowser: IWebBrowser;
  Doc : IHtmlDocument2;
begin
  currentBrowser := pDisp as IWebBrowser;
  topBrowser := (ASender as TWebBrowser).DefaultInterface;
  if currentBrowser = topBrowser then
    begin
      // Основной документ
      Doc := currentBrowser.Document as IhtmlDocument2;
      ShowMessageFmt('ImageCount: %d', [Doc.images.length]);
    end
  else
    begin
      // ifarme
      Doc := currentBrowser.Document as IhtmlDocument2;
      ShowMessageFmt('ImageCount: %d', [Doc.images.length]);
      // Дополнительный код для обработки и сохранения изображений
    end;
end;

end.

Важно отметить, что процесс сохранения самого изображения уже обсуждался в другом вопросе и может быть реализован с использованием соответствующих методов.

Альтернативные подходы

Также стоит учитывать, что веб-страницы могут передавать изображения клиенту двумя способами: как файлы, сохраняемые в папку временных интернет-файлов, или через специальный поток данных изображений, что часто используется для изображений, которые часто обновляются, или когда владелец сайта не хочет, чтобы их изображения копировали.

Кроме того, при работе с кросс-доменными фреймами, доступ к коллекции Frames может быть невозможен, но существуют и другие способы доступа к содержимому.

Используя представленный код, разработчики на Delphi смогут успешно решать подобные задачи, связанные с доступом и сохранением изображений на веб-страницах, используя компонент TWebBrowser.

Создано по материалам из источника по ссылке.

Проблема заключается в том, что при использовании компонента `TWebBrowser` в Delphi для отображения веб-страниц не все изображения доступны через коллекцию `Images` браузера, особенно если они расположены в iframe.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:54:04/0.0023260116577148/0