我使用IHTMLDocument2
接口使用IHTMLStyleSheetRulesCollection
属性检索IHTMLDocument2::styleSheets
。它适用于检索<style>
标记内的样式(在文档<head>
中)。
我使用上面的代码来查找设置了backgroundImage
的所有样式(我需要读取该值)。
但是,此集合不包括<body>
内的内联样式,如:
<p style="background:url(image.jpg);"></p>
从此<p>
标记中提取“image.jpg”。
扫描整个DOM树以查找具有附加背景图像的“样式”属性的元素的方法是什么?欢迎使用C ++或Delphi中的代码示例。
答案 0 :(得分:4)
您必须迭代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;