Сбой IE8 при фоновой позиции getStyle

Я обнаружил странную ошибку в Internet Explorer 8. Может быть, кто-нибудь поможет мне ее обойти.

Когда я пытаюсь захватить фоновое положение элемента, используя background-position-x, все версии Internet Explorer работают как за исключением IE8, который дает сбой.

Когда я запускаю el.getStyle('background-position'), все браузеры дают мне правильные значения, кроме IE (6, 7 и 8), которые возвращают undefined.

Поэтому я использую el.getStyle('background-position-x') для всех версий IE.

Однако IE8 дает сбой на приведенном выше коде.

У кого-нибудь были подобные проблемы?


person Frankie    schedule 27.11.2009    source источник
comment
Вы проверяли, является ли el нулевым, прежде чем вызывать для него функцию? У меня были случаи, когда объект не инициализировался в других браузерах, а не в IE.   -  person theraneman    schedule 27.11.2009
comment
Спасибо за вклад, theraneman! Это действительно ошибка mootools/ie. Вы должны использовать встроенный стиль. Прочитайте мой ответ ниже.   -  person Frankie    schedule 27.11.2009


Ответы (4)


Спасибо всем за помощь. Это действительно ошибка и работает только в следующем сценарии.

  1. css должен быть загружен во внешнюю таблицу стилей
  2. элемент не имеет встроенного стиля

Способ исправить это, даже очень грязный, заключается в добавлении встроенного стиля к элементу. Делает IE8 счастливым, и все другие браузеры работают.

Я не проверял, но в соответствии с этой заявкой, FF2 тоже страдает таким же поведением.

Примечания:
@marcgg - я собирался понизить ваш ответ, так как он действительно бесполезен (и должен начать флейм), но, по правде говоря, jQuery не проявляет этого проблема. Хотя, как вы, наверное, уже знаете, это НЕ вариант! ;)

@Fabien - IE поддерживает background-position-x и не поддерживает background-position конструкцию, одобренную W3C.

person Frankie    schedule 27.11.2009
comment
это полезно знать, хотя я недавно сделал анимацию спрайта, которая ДЕЙСТВИТЕЛЬНО читает это на блочном элементе с внешней таблицей стилей и mootools, и у меня не было таких проблем. наверное мне повезло ;) - person Dimitar Christoff; 27.11.2009
comment
@Dimitar, возможно, вы установили CSS через javascript перед его захватом. Таким образом, IE работает нормально. В моей конструкции мне пришлось прочитать позицию фона, прежде чем устанавливать для нее новые значения. Это был Каса? - person Frankie; 27.11.2009
comment
да, это элемент, полностью встроенный в DOM с помощью нового элемента и действительного начального значения. ОДНАКО последующие изменения вносятся после прочтения. . теперь, когда вы упомянули об этом, есть несколько странных обходных путей для IE, подобных этому - например, преобразование элементов во встроенные в переполнении: скрытый слой, когда вы хотите блокировать, может быть разочаровывающим... - person Dimitar Christoff; 28.11.2009

Почему бы не использовать css-функцию jquery, которая прекрасно работает в кроссбраузерном режиме?

person marcgg    schedule 27.11.2009
comment
Вы предлагаете использовать целую библиотеку для крошечной функции css()? - person James; 27.11.2009
comment
Он уже использует MooTools... Так что использовать JQuery было бы бессмысленно. - person James; 27.11.2009
comment
MooTools или PrototypeJS;) IE не поддерживает background-position-x - person Fabien Ménager; 27.11.2009

Попробуйте использовать:

el.getStyle('backgroundPositionX')

и

el.getStyle('backgroundPositionX')
person Adam Hopkinson    schedule 27.11.2009
comment
Пробовал из любопытства, но они все равно вылетали из IE8. Путь выглядит как грязный встроенный стиль. - person Frankie; 27.11.2009

да, более старая ветка, но я решил опубликовать другое решение, которое я наткнулся на маяк @mootools....

if (Browser.Engine.trident){
    var xy = el.getStyle('background-position-x')+" "+el.getStyle('background-position-y');
} else {
    var xy = el.getStyle("backgroundPosition");
}

работает хорошо для меня до сих пор.

person kfancy    schedule 15.07.2010