diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js index 3a375c645c..179de144ba 100644 --- a/lib/OpenLayers/Util.js +++ b/lib/OpenLayers/Util.js @@ -986,22 +986,38 @@ OpenLayers.Util.pagePosition = function(forElement) { var valueT = 0, valueL = 0; var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; + var child = forElement; + while(element) { - // Safari fix - if (element.offsetParent==document.body) - if (OpenLayers.Element.getStyle(element,'position')=='absolute') break; + if(element == document.body) { + if(OpenLayers.Element.getStyle(child, 'position') == 'absolute') { + break; + } + } + + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; - } while (element = element.offsetParent); + child = element; + try { + // wrapping this in a try/catch because IE chokes on the offsetParent + element = element.offsetParent; + } catch(e) { + OpenLayers.Console.error( + "OpenLayers.Util.pagePosition failed: element with id " + + element.id + " may be misplaced." + ); + break; + } + } element = forElement; - do { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } while (element = element.parentNode); - + while(element) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + element = element.parentNode; + } + return [valueL, valueT]; };