Я пытаюсь использовать ClientBundle в своем приложении GWT, чтобы заставить повторные изображения отправляться как единственный файл. Я объявляю пакет как так:
public interface MyResources extends ClientBundle {
public static final MyResources INSTANCE = GWT.create(MyResources.class);
@Source("icon1.png") ImageResource icon1();
@Source("icon2.png") ImageResource icon2();
}
Это работает отлично в Firefox и IE8, но в IE7 (и ранее) целый спрайт обнаруживается вместо одного из моих исходных изображений - то есть, icon1 рядом с icon2 рядом с icon3 и так далее. В инструментах разработчика IE8 с помощью IE8-as-IE7 режим или Представление Совместимости, я вижу, что это показывает изображение с именем файла как 26BEFD2399A92A5DDA54277BA550C75B.cache.png, который является тем, что я ожидал бы.
Таким образом, там какой-либо путь состоит в том, чтобы сделать работу спрайтов изображения GWT в IE7 и ниже? В противном случае есть ли какой-либо способ корректно ухудшиться так, пользователи других браузеров получают ускорение вытекания сильной струей и IE7, и пользователи IE6 получают что-то, что выглядит правильным, но медленнее?
Править: Клиентское Руководство разработчика Пакета имеет обсуждение использования ClientBundle и @sprite, и говорит, что "Поддержка IE6 не выполнима в этом формате, потому что структурные изменения к DOM необходимы для реализации эффекта "работы с окнами". После того как возможно отличить ie6 и ie7 в user.agent, мы могли пересмотреть поддержку 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);
}
}
Использование Image.setUrl (MyResources.INSTANCE.icon1 (). GetUrl ()) является проблемой.
Вы должны использовать Image.setResource (MyResources.INSTANCE.icon1 ()) вместо
Как вы используете ImageResource?
Проблема, на которую вы ссылаетесь, существует только в том случае, если вы используете ее с директивой CssResource @sprite.
Если вы используете его, создав вместо этого экземпляр объекта Image, он должен нормально работать в IE6 + 7
У меня аналогичная проблема возникает и в IE7, в основном потому, что у меня нет другого выбора, кроме как использовать параметр getUrl (), потому что мне нужно установить ресурс в качестве фона. изображение. т.е.Вместо чего-то вроде (в приведенном выше примере):
this.icon.setUrl(MyResources.INSTANCE.icon1().getURL());
Мне нужно сделать:
this.mypanel.getElement().getStyle().setBackgroundImage("url("+MyResources.INSTANCE.icon1().getURL()+")");
В то время как исправление для первого бита приведенного выше кода состоит в том, чтобы сделать «this.icon.setResource (MyResources.INSTANCE.icon1 ()) ", который не работает для установки фонового изображения, так как он просто ожидает String. В IE8 и других браузерах вторая часть кода работает нормально. Но в IE7 он отображает весь пакет изображений (как в исходной проблеме, описанной выше).
Есть ли способ установить фоновое изображение, используя изображение из GWT ResourceBundle, чтобы оно правильно работало в IE7?