2013-10-24 180 views
3

我使用IHTMLDocument2接口來檢索IHTMLStyleSheetRulesCollection使用IHTMLDocument2::styleSheets屬性。它適用於檢索<style>標記中的樣式(在文檔<head>中)。IHTMLStyleSheetRulesCollection樣式標記(內聯樣式)

我用上面的方法找到所有設置爲backgroundImage的樣式(我需要讀取這個值)。

然而,這個集合不包括內部<body>內嵌樣式,如:

<p style="background:url(image.jpg);"></p>從這個<p>標籤中提取「image.jpg的」。

什麼是掃描整個DOM樹發現有附有背景圖片「風格」屬性元素的方法嗎?歡迎使用C++或Delphi代碼示例。

回答

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; 
+0

+1你快:) – kobik

+0

@kobik抱歉:-( – bummi

+2

只是一個音符,因爲OP是尋找'body'元素,他可能會考慮迭代'Document.body.all'。 – kobik