zhangzhonghua: 看到你的文章很激动,因为我也准备做这么一个类似的东西,我们可以交流一下的,你认为呢? 等你的来信 [email protected]

解决方案 »

  1.   

      你不应该这样改动。这样的改动只是对你的浏览器控件的显示修改。你可以通过取得html的源文件后进行修改来做这样的改动。你可以看一下你改动后的源文件中的背景色设置仍是原来的值。通过getBody取得内容后对这部分的内容可以直接修改,并且立竿见影。
      

  2.   

    sunsetyang: 谢谢回复,但我不是很理解你的意思,对浏览器控件的显示修改也是在内存中改,改完后Dump出来,不是吗?我记得以前做XML时,用的是IXML***等接口时,是可以将改动后的Document Tree保存起来的。为什么IHTML***不可?
    直觉上,修改Document Tree是最方便的。能否详细一点,如有代码例子更好?请指教!
      

  3.   

    sunsetyang:简单地说,我想明白这么一件事如何解释。
    IE5.0浏览到一个页面unknown.html后,另存为c:\test\unknown.html,实际上它还在test子目录下创建了一个子目录unknown.files,其中存放图片文件,而unknown.html也被修改,使其中的图片的src=指向unknown.files子目录下的图片文件。
    我想,它应该是修改Document Tree后再保存的吧。请指教!
      

  4.   

    我的一点看法:
    MSHTML 把源文件/数据流读入内存,形成各种数据结构(树、链表等)和 COM 对象。我们通过 DHTML DOM 模型修改 DOM 对象的时候,实际上修改的是在内存中的 COM 对象,并不直接修改原来的源文件/数据流。这点 XML DOM 模型不一样,整个 XML 数据是一个树结构。通过 IXMLDOM* 修改/添加/删除相应的节点后,DOMDocument.Save 可以简单的遍历整棵树把相应的元素、属性装换成文本形式。而 HTML 各个元素的结构并不统一,在内存中形成的并不是*一个*结构,牵涉方面太多,要做起来太困难。至于从 IE 5 开始可以把页面存成本地文件,并且把相应的图形文件、CSS 等文件存在一个 Page_name_files 下面,是 IE 分析 DHTML 把他们从服务器上下载下来的,并把本的 HTML 文件的连接和 SRC 等属性改为指向本的路径,HTML 源文件并非如此。用 IE 5 提供的 DHTMLEDIT 组件应当很好,没使用过。随 IE 5.0 安装的 Outlook Express 就是用的 DHTMLEDIT。
      

  5.   

    谢谢edyang,你把DHTML DOM 模型和XML DOM 模型的区别讲得太精妙了!
    但是你讲IE 5把页面存成本地文件的那一段,我仍有疑惑:
    假设原本HTML页面中src="001.jpg",IE 分析后的DOM结果是 imgObj.src == "001.jpg",我们知道IE 5保存后将变成src="c:\test\unknown.files\001.jpg",那么,它是先修改DOM imgObj.src = "c:\test\unknown.files\001.jpg",再DOMDocument.Save进行serialize,还是其它办法?
    疑惑的关键,就是DHTML DOM的内存COM 对象是怎么和HTML的文本形式源码相互作用的,
    HTML的文本形式源码 -> DHTML DOM的内存COM 对象,这是IE5的解析功能;
    DHTML DOM的内存COM 对象 -> HTML的文本形式源码,怎么做?
    解开此惑,即刻奉分。
      

  6.   

    IE 5 不是修改 DHTML DOM 对象,而是分析源文件,把相应的一些有关路径的属性改为指向本地的路径,但是肯定不能像你说的带盘符,也是相对路径。你看一下 IE 5 存成的文件内容和在 IE 5 里面用 View Source 看到的内容就知道了。你也可以这么做。