diff --git a/lib/OpenLayers/BaseTypes/Element.js b/lib/OpenLayers/BaseTypes/Element.js index 28d37d8e49..0f75bbf871 100644 --- a/lib/OpenLayers/BaseTypes/Element.js +++ b/lib/OpenLayers/BaseTypes/Element.js @@ -215,23 +215,27 @@ OpenLayers.Element = { */ getStyle: function(element, style) { element = OpenLayers.Util.getElement(element); - var value = element.style[OpenLayers.String.camelize(style)]; - if (!value) { - if (document.defaultView && - document.defaultView.getComputedStyle) { - - var css = document.defaultView.getComputedStyle(element, null); - value = css ? css.getPropertyValue(style) : null; - } else if (element.currentStyle) { - value = element.currentStyle[OpenLayers.String.camelize(style)]; + + var value = null; + if (element && element.style) { + value = element.style[OpenLayers.String.camelize(style)]; + if (!value) { + if (document.defaultView && + document.defaultView.getComputedStyle) { + + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css.getPropertyValue(style) : null; + } else if (element.currentStyle) { + value = element.currentStyle[OpenLayers.String.camelize(style)]; + } + } + + var positions = ['left', 'top', 'right', 'bottom']; + if (window.opera && + (OpenLayers.Util.indexOf(positions,style) != -1) && + (OpenLayers.Element.getStyle(element, 'position') == 'static')) { + value = 'auto'; } - } - - var positions = ['left', 'top', 'right', 'bottom']; - if (window.opera && - (OpenLayers.Util.indexOf(positions,style) != -1) && - (OpenLayers.Element.getStyle(element, 'position') == 'static')) { - value = 'auto'; } return value == 'auto' ? null : value; diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 50b9851735..e2aaddfa0a 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -1066,12 +1066,7 @@ OpenLayers.Util.pagePosition = function(forElement) { while(element) { if(element == document.body) { - // FIXME: IE, when passed 'window' as the forElement, treats it as - // equal to document.body, but window.style fails, so getStyle - // fails, so we are paranoid and check this here. This check should - // probably move into element.getStyle in 2.6. - if(child && child.style && - OpenLayers.Element.getStyle(child, 'position') == 'absolute') { + if(OpenLayers.Element.getStyle(child, 'position') == 'absolute') { break; } } diff --git a/tests/BaseTypes/Element.html b/tests/BaseTypes/Element.html index ffe4a59b49..9aa4fec33a 100644 --- a/tests/BaseTypes/Element.html +++ b/tests/BaseTypes/Element.html @@ -219,13 +219,14 @@ } function test_Element_getStyle(t) { - t.plan(4); + t.plan(5); //tests for this function are not 100% complete... there is some funky // business going on in there with // * document.defaultView (moz/ff I believe) // but I cant seem to find a good way to test them. // + t.ok(OpenLayers.Element.getStyle(null, null) == null, "passing null values in to getStyle() doesnt bomb, returns null"); var elem = document.getElementById("elemID"); elem.style.chickenHead = {}