zoukankan      html  css  js  c++  java
  • 关于Win8对getElementsByTagName等dom方法兼容性的替代方法

    在对Twebbrowser进行dom编程时,引用MSHTML并使用其中的HTMLDocument; IHTMLElementCollection;IHTMLElement;能获得较好的代码提示

    其中封装的一些方法如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元素,这个代码在Win88.1中是会报错的。

    我推测出错的原因可能是MSHTML对Win8支持不好,可能有些方法需要重新封装。

    目前解决的办法只好放弃MSHTML改用Variant来代替HTMLDocument; IHTMLElementCollection;IHTMLElement;

    Doc.getElementsByTagName(TagName)换成wbIE.OleObject.document.getElementsByTagName(TagName)来用,能解决win8不兼容的问题。

  • 相关阅读:
    读书笔记——数据结构(1)开篇吐槽
    问题解决——产生未引用参数的警告
    移植对话框资源
    问题解决——XP线程池找不到QueueUserWorkItem
    SD 笔记01
    css3 笔记 背景
    Css3 笔记 动画 和定位属性
    小程序笔记
    C# E店宝格格家接口对接
    JS:onmouseover 、onmouseout
  • 原文地址:https://www.cnblogs.com/delphi7456/p/4136944.html
Copyright © 2011-2022 走看看