Вопрос пользователя заключается в том, как извлечь HTML-код из iframe, который используется в качестве редактора обогащенного текста, загруженного в компонент TWebBrowser в Delphi. Решение проблемы состоит в получении доступа к внутреннему документу iframe, что позволяет извлечь HTML-код.
Шаг 1: Получение элемента iframe
Для начала, необходимо получить сам элемент iframe. Это можно сделать с помощью метода getElementById, используя идентификатор iframe:
NodeName := 'htmleditor_ifr';
BodyIframe := (WebBrowser1.Document as IHTMLDocument3).getElementById(NodeName);
Шаг 2: Получение внутреннего документа iframe
Далее, необходимо получить доступ к внутреннему документу iframe. В более новых версиях Delphi это можно сделать, приведя элемент iframe к интерфейсу IHTMLIFrameElement3 и используя свойство contentDocument:
ContentHTML := ((BodyIframe as IHTMLIFrameElement3).contentDocument) as IHTMLDocument2;
Шаг 3: Извлечение HTML-кода
После получения внутреннего документа, можно извлечь HTML-код, обратившись к свойству innerHTML элемента body:
Body := ContentHTML.body.innerHTML;
Решение для Delphi 7
В старых версиях Delphi, например, в Delphi 7, интерфейс IHTMLIFrameElement3 отсутствует. В таком случае, можно использовать следующий подход:
Импортировать определения интерфейса с помощью меню "Component" > "Import ActiveX Control".
Получить элемент iframe как описано выше.
Привести элемент iframe к интерфейсу IUnknown и использовать late binding для доступа к свойству contentWindow.
Получить внутренний документ iframe через свойство contentWindow.
Извлечь HTML-код, обратившись к свойству innerHTML элемента body.
Пример кода для Delphi 7
NodeName := 'htmleditor_ifr';
var
BodyIframe: IUnknown;
ContentWindow, ContentHTML: IUnknown;
begin
BodyIframe := (WebBrowser1.Document as IHTMLDocument3).getElementById(NodeName);
if Supports(BodyIframe, IID_IUnknown) then
begin
ContentWindow := BodyIframe as IUnknown;
if ContentWindow.GetInterface(IID_IDispatch, ContentWindow) then
begin
var VariantContentWindow := ContentWindow as Variant;
ContentHTML := VariantContentWindow.contentWindow;
if Supports(ContentHTML, IID_IDispatch) then
begin
ContentHTML := IUnknown(ContentHTML).QueryInterface(IID_IHTMLDocument2);
Body := ContentHTML.body.innerHTML;
end;
end;
end;
end;
Таким образом, пользователь может извлечь HTML-код из iframe, используя компонент TWebBrowser в Delphi, даже в старых версиях этой среды разработки.
Вопрос касается извлечения HTML-кода из iframe, используемого в качестве редактора в компоненте TWebBrowser в Delphi, с учетом особенностей различных версий Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS