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

Работа с CSS и DOM: Как получить список стилевых атрибутов элемента в браузере?

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

Вопрос, заданный пользователем, касается получения списка стилевых атрибутов элемента HTML с использованием интерфейсов COM, которые предоставляются браузером для работы с DOM. В частности, речь идет о том, как получить доступ ко всем атрибутам стиля IHTMLStyle элемента IHTMLElement, не прибегая к ручному разбору строки cssText.

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

Пользователь использует следующий код для вставки HTML-содержимого в документ браузера и получения информации о стиле элемента:

const
  HTML_DOC =
    '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' +
    '<BODY><P id="p1" style="width: 440px; height: 344px; margin: 3px 2px; float: left;">test</P></BODY>' +
    '</HTML>';

procedure TForm1.Button1Click(Sender: TObject);
var
  HTMLTxtRange: IHTMLTxtRange;
  HTMLDocument: IHTMLDocument2;
  HTMLElement: IHTMLElement;
  HTMLStyle: IHTMLStyle;
begin
  WebBrowser1.Navigate('about:blank');
  while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
    Application.ProcessMessages;

  HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
  HTMLTxtRange := (HTMLDocument.body as IHTMLBodyElement).createTextRange;
  HTMLTxtRange.PasteHTML(HTML_DOC);

  HTMLElement := (HTMLDocument as IHTMLDocument3).getElementById('p1');
  if Assigned(HTMLElement) then
  begin
    HTMLStyle := HTMLElement.style {as IHTMLStyle2};
    Memo1.Lines.Add(HTMLStyle.cssText);  // MARGIN: 3px 2px; WIDTH: 440px; FLOAT: left; HEIGHT: 344px
    Memo1.Lines.Add(HTMLStyle.getAttribute('margin', 0)); // 3px 2px
  end;
end;

Пользователь хочет получить список всех атрибутов стиля элемента, например:

MARGIN
WIDTH
FLOAT
HEIGHT

Подходы к решению

Существующие интерфейсы IHTMLStyle и его потомки не предоставляют функциональности для получения списка атрибутов стиля напрямую. Однако, поскольку IHTMLStyle реализует интерфейс IDispatch, можно попробовать использовать IDispatch.GetTypeInfo() для получения интерфейса ITypeInfo, который описывает объект стиля, и затем проитерировать доступные свойства, используя IDispatch.Invoke() для чтения значений каждого свойства. Тем не менее, если GetTypeInfo() не возвращает подходящий ITypeInfo, то альтернативы ручному разбору cssText нет.

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

Также рассматривается возможность использования IHTMLWindow7 и IHTMLCSSStyleDeclaration для получения сведений о стиле элемента, включая возможность перебора атрибутов:

var
  Win7: IHTMLWindow7;
  css: IHTMLCSSStyleDeclaration;
begin
  Win7 := (WebBrowser1.Document as IHTMLDocument2).ParentWindow as IHTMLWindow7;
  css := Win7.GetComputedStyle(HTMLElement as IHTMLDOMNode);

  for var i := 0 to css.Length - 1 do
    css.Item(i).Name; // Получение имени атрибута
end;

Заключение

В зависимости от версии Internet Explorer и реализации интерфейсов COM, предложенные подходы могут быть успешными или нет. В современных браузерах и с учетом политик безопасности, возможно, потребуется использование JavaScript для работы с DOM и CSS, особенно если приложение выполняется в контексте ограниченной безопасности.

Пример кода для разбора свойств стиля

var
  typeInfo: ITypeInfo;
  disp: IDispatch;
  style: IHTMLStyle;
begin
  disp := HTMLStyle as IDispatch;
  if disp.GetTypeInfo(0, 0, typeInfo) then
  begin
    var propCount: Longint;
    if typeInfo.GetProps(0, -1, propCount) then
    begin
      SetLength(props, propCount);
      if typeInfo.GetProps(0, propCount, props[0], @propCount) then
      begin
        for var i := 0 to propCount - 1 do
        begin
          var prop: TAGPROPERTYINFO;
          prop := props[i];
          var varName: OleStr;
          OleVariantGetTypeInfoName(prop.lpstrName, varName);
          // Здесь можно извлечь информацию о свойстве стиля
        end;
      end;
    end;
  end;
end;

Этот код демонстрирует, как можно использовать ITypeInfo для получения списка свойств стиля. Однако, стоит отметить, что детальная реализация может потребовать учета особенностей конкретной версии браузера и возможных ограничений безопасности.

При работе с браузерами и интерфейсами COM в Delphi важно помнить о совместимости и возможных ограничениях, особенно в свете обновлений и изменений в политике безопасности.

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

Пользователь интересуется, как получить список стилевых атрибутов элемента в браузере, используя интерфейсы COM для работы с DOM.


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

Получайте свежие новости и обновления по 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:24:57/0.0031790733337402/0