OpenLayers OpenLayers

Ticket #798: iecrash.2.patch

File iecrash.2.patch, 1.6 kB (added by tschaub, 1 year ago)

smaller try/catch

  • lib/OpenLayers/Util.js

    old new  
    956956    var valueT = 0, valueL = 0; 
    957957 
    958958    var element = forElement; 
    959     do { 
    960       valueT += element.offsetTop  || 0; 
    961       valueL += element.offsetLeft || 0; 
     959    var child = forElement; 
     960    while(element) { 
    962961 
    963       // Safari fix 
    964       if (element.offsetParent==document.body) 
    965         if (OpenLayers.Element.getStyle(element,'position')=='absolute') break; 
     962        if(element == document.body) { 
     963            if(OpenLayers.Element.getStyle(child, 'position') == 'absolute') { 
     964                break; 
     965            } 
     966        } 
     967         
     968        valueT += element.offsetTop  || 0; 
     969        valueL += element.offsetLeft || 0; 
    966970 
    967     } while (element = element.offsetParent); 
     971        child = element; 
     972        try { 
     973            // wrapping this in a try/catch because IE chokes on the offsetParent 
     974            element = element.offsetParent; 
     975        } catch(e) { 
     976            OpenLayers.Console.error( 
     977                "OpenLayers.Util.pagePosition failed: element with id " + 
     978                element.id + " may be misplaced." 
     979            ); 
     980            break; 
     981        } 
     982    } 
    968983 
    969     element = forElement; 
    970     do { 
    971       valueT -= element.scrollTop  || 0; 
    972       valueL -= element.scrollLeft || 0; 
    973     } while (element = element.parentNode); 
    974  
     984    for(element=forElement; element; element=element.parentNode) { 
     985        valueT -= element.scrollTop  || 0; 
     986        valueL -= element.scrollLeft || 0; 
     987    } 
     988     
    975989    return [valueL, valueT]; 
    976990}; 
    977991