在对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