可以使用ImageBundle的GWT图像精灵在IE7和IE6中工作吗?

aem*_*aem 5 gwt sprite internet-explorer-7 internet-explorer-6

我正在尝试在我的GWT应用程序中使用ClientBundle来使多个图像作为单个文件发送.我这样声明了这个包:

public interface MyResources extends ClientBundle {
  public static final MyResources INSTANCE = GWT.create(MyResources.class);

  @Source("icon1.png") ImageResource icon1();
  @Source("icon2.png") ImageResource icon2();
}
Run Code Online (Sandbox Code Playgroud)

这在Firefox和IE8的伟大工程,但在IE7(或更早)整个精灵代替我原来的图像之一的显示出来 - 那就是,ICON1旁边旁边ICON3到ICON2,等等.在使用IE8-as-IE7模式或兼容性视图的IE8开发人员工具中,我可以看到它显示的文件名如26BEFD2399A92A5DDA54277BA550C75B.cache.png,这是我所期望的.

那么有没有办法让GWT图像精灵在IE7和更低版本中运行?如果没有,有没有办法优雅地降级,所以其他浏览器的用户获得spriting的加速,IE7和IE6用户获得看起来正确但速度较慢的东西?

编辑:客户端包开发者指南具有使用ClientBundle和@sprite的讨论,并说:"对IE6的支持是不是在这种格式是可行的,因为对DOM结构变化是实行必要的'窗口’效应一旦它的可能.为了区分user.agent中的ie6和ie7,我们可以重新考虑对ie6的支持.在当前的实现中,ie6代码将无法正确呈现,尽管这是一个纯粹的装饰性问题.这是在我的情况下发生了什么,有没有办法解决它?显示所有图像"纯粹是一个美容问题",但它是一个非常严重的问题.

编辑2:这是我如何使用图像:

public class MyTabHeader extends Composite {
  @UiField Image icon;

  public MyTabHeader(String iconPath) {
    initWidget(uiBinder.createAndBindUi(this));
    this.icon.setUrl(iconPath);
  }
}

public class MyTabPanel extends TabPanel {
  public MyTabPanel() {
    String icon1 = MyResources.INSTANCE.icon1().getURL();
    MyTabHeader tabHeader1 = new MyWidget(icon1);
    Widget tabContent1 = new HTML("Content 1");
    add(tabContent1, tabHeader1);

    String icon2 = MyResources.INSTANCE.icon2().getURL();
    MyTabHeader tabHeader2 = new MyWidget(icon2);
    Widget tabContent2 = new HTML("Content 2");
    add(tabContent2, tabHeader2);
  }
}
Run Code Online (Sandbox Code Playgroud)

Chi*_*Chi 9

使用Image.setUrl(MyResources.INSTANCE.icon1().getUrl())是个问题.

您应该使用Image.setResource(MyResources.INSTANCE.icon1())