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

Исправление ошибки извлечения URL-адресов из IHTMLDocument2 в Delphi

Delphi , Файловая система , Ярлыки

Пользователи, сталкивающиеся с разработкой на Delphi, иногда могут встретиться с проблемами при работе с веб-контентом. Одной из таких проблем является некорректное извлечение URL-адресов из элементов IHTMLDocument2. В этом руководстве мы рассмотрим, как исправить такую ошибку, и приведем несколько примеров решений.

Описание проблемы

При работе с IHTMLDocument2 в Delphi, вместо получения полного URL-адреса, например, <a href="http://ena.ge/explanatory-online">http://ena.ge/explanatory-online</a>, возвращается сокращенный путь вида about:/explanatory-online. Простой метод замены префикса "about:" на корневой URL не всегда приводит к ожидаемому результату.

Пример кода

Для начала рассмотрим исходный код, который используется для извлечения гиперссылок:

procedure process_url(MyURL: string; var MyHTML, MyHyperlinks: TStrings; var MyInnerText, MyInnerHTML: WideString);
var
  resp: TMemoryStream;
  IdHTTP: TidHTTP;
  v: Variant;
  iDoc: IHTMLDocument2;
  links: OleVariant;
  MyHyperlink, aHref: string;
  i: integer;
begin
  // ... код для загрузки HTML-контента ...
  // Получение всех тегов 'A' на странице
  links := iDoc.all.tags('A');
  // ... код для обработки ссылок ...
end;

Подтвержденное решение

Изучив исходный код страницы, можно заметить, что ссылки в нем представлены в другом формате, например: href="/explanatory-online". Если использовать IHTMLDocument2 для загрузки страницы с помощью IdHttp, то он не будет иметь оригинального адреса страницы. В качестве решения можно использовать компонент TWebBrowser или же выполнить замену строк вручную, либо использовать IHTMLDocument4.

Пример 1 (использование TWebBrowser)
procedure process_url(MyURL: string; var MyHTML, MyHyperlinks: TStrings; var MyInnerText, MyInnerHTML: WideString);
var
  Flags: System.OleVariant;
  iDoc: IHTMLDocument2;
  links: OleVariant;
  MyHyperlink, aHref: string;
  i: integer;
begin
  // ... код для навигации к указанному URL с помощью TWebBrowser ...
  // Получение всех тегов 'A' на странице
  links := iDoc.all.tags('A');
  // ... код для обработки ссылок ...
end;
Пример 2 (замена строк)
function GetDomain(URL: String): String;
begin
  // ... код для получения домена URL ...
end;

procedure process_url(MyURL: string; var MyHTML, MyHyperlinks: TStrings; var MyInnerText, MyInnerHTML: WideString);
var
  resp: TMemoryStream;
  IdHTTP: TidHTTP;
  v: Variant;
  iDoc: IHTMLDocument2;
  links: OleVariant;
  MyHyperlink, aHref, Domain: string;
  I, J: Integer;
begin
  // ... код для загрузки HTML-контента ...
  // Получение домена для текущего URL
  Domain := GetDomain(MyURL);
  // ... код для обработки ссылок с заменой домена ...
end;
Пример 3 (использование IHTMLDocument4)
function process_url(MyURL: string; var MyHTML, MyHyperlinks: TStrings; var MyInnerText, MyInnerHTML: WideString): Integer;
begin
  // ... код для создания документа из URL с использованием IHTMLDocument4 ...
  // ... код для обработки ссылок ...
end;

Заключение

Приведенные примеры демонстрируют, как можно исправить ошибку извлечения URL-адресов из IHTMLDocument2 в Delphi. Выбор метода зависит от конкретных требований и условий задачи. Важно помнить, что некоторые ссылки могут быть представлены в виде JavaScript-выражений, которые также необходимо обработать отдельно.

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

Пользователи, использующие Delphi для работы с веб-контентом, могут столкнуться с проблемой извлечения полных URL-адресов из элементов `IHTMLDocument2`, и в данном руководстве рассматриваются методы исправления этой ошибки.


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

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




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


:: Главная :: Ярлыки ::


реклама


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

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