delphi - IHTMLStyleSheetRulesCollection 样式标签(内联样式)

标签 delphi dom webbrowser-control twebbrowser ihtmldocument2

我使用IHTMLDocument2检索接口(interface)IHTMLStyleSheetRulesCollection使用IHTMLDocument2::styleSheets属性(property)。它适用于检索 <style> 内的样式。标签(在文档 <head> 中)。

我使用上面的内容来查找具有 backgroundImage 的所有样式设置(我需要读取值)。

但是,此集合不包含 <body> 内的内联样式像:

<p style="background:url(image.jpg);"></p>从中提取“image.jpg”<p>标签。

扫描整个 DOM 树以查找具有附加背景图像的“style”属性的元素的方法是什么?欢迎使用 C++ 或 Delphi 编写代码示例。

最佳答案

您必须迭代 all 而不是 styleSheets 并查看元素的样式。

uses mshtml;

Procedure WebBrowserCreateStringListImagesFromElementStyles(const AWebBrowser: TWebBrowser; ResultList: TStrings; NoUrl: Boolean = false);
var
  nCount: Integer;
  element: IHTMLElement;
  elements: IHTMLElementCollection;
  bgImage: String;
begin
  Assert(Assigned(AWebBrowser.Document) and Assigned(ResultList));
  if Assigned(AWebBrowser.Document) then
  begin
    elements := (AWebBrowser.Document as IHTMLDocument2).all;
    for nCount := 0 To Pred(elements.Length) do
    begin
      element := elements.item(nCount, '') as IHTMLElement;
      if (element.style.backgroundImage <> '') and (UpperCase(element.style.backgroundImage) <> 'NONE') then
      begin
        bgImage := element.style.backgroundImage;
        if NoUrl then
        begin
          if Pos('URL(', UpperCase(bgImage)) = 1 then
          begin
            Delete(bgImage, 1, Length('URL('));
            if Pos(')', bgImage) = Length(bgImage) then
              Delete(bgImage, Length(bgImage), 1);
          end;
        end;
        ResultList.Add(AnsiLowerCase(bgImage));
      end;
    end;
  end;
end;

关于delphi - IHTMLStyleSheetRulesCollection 样式标签(内联样式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554883/

相关文章:

javascript - 在 PWA service worker 中监听按钮点击

.net - 相当于 WebView2 中的 WebBrowser.InvokeScript(String, Object[])

regex - 必须释放创建的 System.RegularExpressions 对象的内存吗?

jquery - 通过 jquery 添加 DOM 元素

javascript - JavaScript 生成字段上的 Datepicker JQuery

javascript - 如何使用标记的 URL [VBA]

c# - CoInternetSetFeatureEnabled 与 FEATURE_BLOCK_INPUT_PROMPTS 不起作用

delphi - 如何在运行时分配 MDIChild 的 OnClose 事件?

delphi - fetchondemand在clientdataset中不起作用

delphi - 不兼容的类型 : 'PAnsiChar' and 'PWideChar'