Friday, December 15, 2006

 

Some notes on IE7 Programming - 1

1.
如何避免IE7中Zoom功能放大滚动条

from http://www.cnblogs.com/birdshome/archive/2006/11/26/ie7_zoom.html

由于现在显示器越来越大17'、19'甚至20'都很普通了,并且显示器的分辨率也越来越高,使用1280x1024的用户已经高于使用800x600的用户(根据本站统计)。原有的大量为800x600 9pt字体以及一些为1024x768 9pt字体设计的网页已经非常过时了。所以Zoom功能逐渐成为了浏览器的必备功能。

这个功能我最早是在Opera中看到的(但我并不知道是哪种浏览器最先提供),当时也就是为了用它来对付9pt蚂蚁字体网页,不过由于那时Opera对IE中显示完好的网页问题比较大,用了一段时间就没怎么用了,或者只是偶尔用用。后来使用Firefox,发现FF也提供了这个功能,不过FF的Zoom功能和Opera提供的Zoom功能效果是不同的。Opera的Zoom功能是对页面做按比例放大,就是说我们看到的放大页面就像是在放大镜下看到的效果一样。而FF提供的Zoom功能类似IE的字缩放,但又有所不同(IE是真正的文字缩放,而且只能缩放没有使用CSS限制的默认字体的大小)。FF的字体缩放不管字体是否使用CSS定义,都可以被缩放,并且除了图片外,文本框、复选框以及下拉列表框等控件也会被缩放。

这两种缩放各有优势,不能说谁特别好,也不能说谁特别差。只是Opera的Zoom方式比较适合对付将网页宽度定死为适合800x600或1024x768的页面,而Firefox的Zoom适合对付页面宽度根据浏览器宽度自动填充的页面。在这个Zoom功能方面,IE7之前的IE做的那是一个差劲啊。由于大多数网页都使用CSS定义字体的大小,所以IE提供的那5个Level的字体大小控制,几乎没有任何实用价值。当然目前值得大家高兴的是,IE7提供了Zoom功能。

IE7提供了类似Opera那样的Zoom功能,可是不知道IE在搞什么飞机,Zoom页面的同时,有很大一部分网页的滚动条也会被同时Zoom:(。本blog首页被Zoom in 400%后的效果如下:

// 这滚动条也被放大的效果让人相当伤感。。。

通过简单研究,原来IE7提供的这个Zoom功能是受doctype定义影响的。像我们博客园中每位blogger自己的首页使用的doctype是:,这时页面的滚动条就会被一起Zoom。而博客园首页和管理页面中的doctype是:,这时页面滚动条就不会被Zoom。

除了标示出dtd文件的URL外,其实只需要修改DTD的类型就可以避免滚动条被Zoom,比如最简单删掉Transitional限制:,这样就可以了。至于到底IE7组要怎么要的doctype,这个我目前还没有找到正式的文档。

2.
IE7 正式发布版不支持offsetheight,clientheight,scrollheight属性

from http://www.cnblogs.com/patrick/archive/2006/11/02/547462.html

这两天在测试程序在IE7的兼容性,发现原来在IE6显示正常的布局,在IE7下完全乱了。
前一阵用IE7 测试版还显示正常。
通过跟踪javascript,发现
document.body.offsetHeight
根本取不到值,又试了clientHeight也取不到值。

不知道是IE7正式版的bug, 还是有其他新的方法,不再支持这些属性。

那位朋友知道,提示一下。

谢谢

将页面的doctype从
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
换成
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
可以取道offsetHeight 值

我的程序用vs2005开发,页面上的控件尺寸,字大小就全乱了,得从新调整

# re: IE7 正式发布版不支持offsetheight,clientheight,scrollheight属性 回复 更多评论
2006-11-02 12:51 by ddee
这个问题我前段时间也遇到了的,而且ie7的rc2也没有问题,但是在正式版中就存在问题了。

后来我是在css显示指定了每个样式的position,特别是body,就没有问题了。可能是7.0正式版对默认值上支持的问题

3.
From http://blog.joycode.com/jiangsheng/archive/2006/10/28/85822.aspx

Building Browser Helper Objects with Visual Studio 2005
尽管BHO被给与了太多的权限,以至于很多反恶意软件对BHO倍加关注,但是很多BHO也是很有用的,例如Google ToolBar和Internet Explorer Developer Toolbar。在Windows XP SP2中,微软在IE中加入了加载项管理器来管理包含BHO在内的浏览器扩展。

微软在1999年1月发布了一篇名为Browser Helper Objects: The Browser the Way You Want It的文章,同时在微软知识库中也提供了一个示例IEHelper,这使得编写BHO的难度大大降低,但是这也使得有缺陷的BHO的数量增加。甚至在最近这篇文章Building Browser Helper Objects with Visual Studio 2005的示例代码中,也有着一些缺陷,但是这篇文章也详尽地阐述了编写BHO需要注意的事项,编写BHO的程序员应该去看一看。

文中的RGS应该从

HKLM {
SOFTWARE {
Microsoft {
Windows {
CurrentVersion {
Explorer {
'Browser Helper Objects' {
ForceRemove '{D2F7E1E3-C9DC-4349-B72C-D5A708D6DD77}' = s
'HelloWorldBHO' {
val 'NoExplorer' = d '1'
}
}
}
}
}
}
}
}

改为


HKLM {
NoRemove SOFTWARE {
NoRemove Microsoft {
NoRemove Windows {
NoRemove CurrentVersion {
NoRemove Explorer {
NoRemove 'Browser Helper Objects' {
ForceRemove '{D2F7E1E3-C9DC-4349-B72C-D5A708D6DD77}' = s
'HelloWorldBHO' {
val 'NoExplorer' = d '1'
}
}
}
}
}
}
}
}

public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2,
&LIBID_SHDocVw, 1, 0>

应该改为

public IDispEventImpl<1, CHelloWorldBHO, &DIID_DWebBrowserEvents2,
&LIBID_SHDocVw, 1, 1>

If the page has no frames, the event is fired once after the page is ready, but before any script has run.这句话有误,浏览器在下载到BODY内嵌的script标签的时候就会执行脚本。

those that fire DownloadBegin will also fire a corresponding DocumentComplete 这里DocumentComplete 应该是DownloadComplete。



<< Home

This page is powered by Blogger. Isn't yours?