在對Twebbrowser進行dom編程時,引用MSHTML並使用其中的HTMLDocument; IHTMLElementCollection;IHTMLElement;能得到較好的代碼提示web
其中封裝的一些方法如getElementsByTagName也能較好的在xp、vista、win7等系統中使用,可是一旦到了win8系統,getElementsByTagName就不能獲取IHTMLElementCollection了,若是你下一步想遍歷IHTMLElementCollection就會提示‘對象未實現’的錯誤提示,而後程序崩潰。例如我封裝的一個方法:編程
function FindElementByClassName(Doc: HTMLDocument; TagName, ClassName: String) : IHTMLElement; var Elements: IHTMLElementCollection; Element: IHTMLElement; I: Integer; begin Result := nil; Elements := Doc.getElementsByTagName(TagName); for I := 0 to Elements.length - 1 do begin Element := Elements.Item(I, varEmpty) as IHTMLElement; if Element._className = ClassName then begin Result := Element; exit; end; end; end;
從指定的Doc中根據TagName獲取指定的ClassName元素,這個代碼在Win8\8.1中是會報錯的。dom
我推測出錯的緣由多是MSHTML對Win8支持很差,可能有些方法須要從新封裝。對象
目前解決的辦法只好放棄MSHTML改用Variant來代替HTMLDocument; IHTMLElementCollection;IHTMLElement;blog
Doc.getElementsByTagName(TagName)換成wbIE.OleObject.document.getElementsByTagName(TagName)來用,能解決win8不兼容的問題。get