标签为 "兼容性" 的存档

解决gwt图片浏览器兼容性问题

最近使用google web toolkit进行网站开发,一直在firefox中进行调试,开发到一定阶段,项目需要发布demo,要求浏览器兼容性。在ie中一测试,原来设计好好的页面变得惨不忍睹,此问题在ie7中尤其明显,经过观察发现,其中一个主要的原因就是图片的问题。

使用gwt开发的一个优点就是自动实现了图标、图片的拼接组合,一般为了优化网站结构及效率,设计者会将使用到的各种小图标、图片拼接在一个透明背景的大图片中,浏览器可以使用较少的连接次数下载图片,在一定程度上提高网站速度。

此处遇到的问题就是与此有关,最初的设计是在一个容器中(比如div),绑定css样式,在css中通过@sprite引用gwt-image,容器中同时包含文本,控制padding属性实现图片在前、文字在后的效果,在firefox中没有问题,在ie7这中设计就有问题了,由于使用的小图标是大的图片文件中的一部分,整个容器会将大图片作为背景,造成文字的背景会出现不该有的图片。解决方法是:为图片使用单独的容器,与文字分开。

同时还遇到另外一个问题,就是图片在ie8中不能正常显示,在ie7及firefox均可显示,查阅了相关资料,原因可能是ie8对于base64编码长度的一个限制造成的。原文是这样描述的:

Internet Explorer 8 limits data URIs to a maximum length of 32 KB.

资料来源于http://en.wikipedia.org/wiki/Data_URI_scheme

gwt对于较小的图片(具体多少k还不太确定)进行base64编码,在css中使用base64代替图片的url,飞尘在实际中测试当图片大于25k的时候,ie8就无法显示了。解决方法是:对图片压缩,保证base64转码后不大于32k;或者将图片切片再组合。

几点思考,gwt对图片的处理机制到底是怎样的,还要进一步的考证,近来gwt也在更新,已经发布了2.1 M2,修正许多已知的bug,相信不久就能够看到2.1正式发布了。

<!– 2010年7月19日更新 –>
to:1楼的朋友

举个例子:

<g:horizontalpanel>
	<g:image resource="{bundle.image1}" />
	<g:html text="some text" />
</g:horizontalpanel>

这是在ui文件中的一个简单的例子,实现的效果类似这个样子的,当然样式需要自己设置。

这里使用的是image的widget,当然可以使用其它widget,然后用css设置使用gwt背景图片,关键的是需要指定放置图片的容器宽度和高度不大于图片。

使ie8兼容ie7页面

在需要保持兼容性的页面中加入如下HTTP meta-tag

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

IE8读到这个标签,就会自动启动IE7兼容模式。

补充:这条标记要加在其它标记之前

ie6 ie7 ie8共存调试网页

使用multiple-ie可以安装ie4、ie5、ie5.5、ie6,系统本身安装ie8,同时使用maxthon(maxthon使用的ie内核是ie7的),这样从ie4到ie8都有了,可以很好的测试网页的兼容性了。