ThinkGeo.com    |     Documentation    |     Premium Support

This.mapDiv.removeChild(this.extentRectangle) error

Hi,


Using the Web Edition 4.5 I'm getting some very frustrating intermittent errors in IE7 when changeing between screens that have a map loaded.


this.mapDiv.removeChild(this.extentRectangle) error in the destroy method of the map.


In order to track the cause of this issue down I plan to put the destroy code in the mapcreating function but the error does not seem to run into this code. Can you have a quick look. its probably an issue with the OpenLayers.Map.prototype.destroy = function () {  line


function OnMapCreating(map) {

    OpenLayers.Map.prototype.destroy = function () {

        if (this.mapDiv) {

            this.handlers.click && this.handlers.click.destroy();

            this.handlers.drag && this.handlers.drag.destroy();

            this.mapDiv.removeChild(this.extentRectangle);

            this.extentRectangle = null;

            if (this.rectEvents) {

                this.rectEvents.destroy();

                this.rectEvents = null

            }

            if (this.ovmap) {

                this.ovmap.destroy();

                this.ovmap = null

            }

            this.element.removeChild(this.mapDiv);

            this.mapDiv = null;

            this.div.removeChild(this.element);

            this.element = null;

            if (this.maximizeDiv) {

                OpenLayers.Event.stopObservingElement(this.maximizeDiv);

                this.div.removeChild(this.maximizeDiv);

                this.maximizeDiv = null

            }

            if (this.minimizeDiv) {

                OpenLayers.Event.stopObservingElement(this.minimizeDiv);

                this.div.removeChild(this.minimizeDiv);

                this.minimizeDiv = null

            }

            this.map.events.un({

                moveend: this.update,

                changebaselayer: this.baseLayerDraw,

                scope: this

            });

            OpenLayers.Control.prototype.destroy.apply(this, arguments)

        }

    }


 


 



 



 


 


Liam


 



Hi Liam,


The error you encountered should occurred in OpenLayers.Control.OverviewMap instead of OpenLayer.Map.


Please overwrite OverviewMap's prototype to track the root cause:


var OnMapCreating = function (map) {
    OpenLayers.Control.OverviewMap.prototype.destroy = function () {
        //...
        }
    }
}


Thanks,


Ivan



Hi Ivan,


Thanks for that, I should have paid a bit more attention to the syntax. I will keep an eye on it and let you know what the issue is.


While we are on the subject I also have another intermittent error but this time in OpenLayers.Ajax.Request.


The error occurs below highlighted in Yellow and the error message simply says syntax error.


Have you seen anything similiar before and do you have any idea as to how I would begin to debug this issue.


    OpenLayers.Ajax.Request = OpenLayers.Class(OpenLayers.Ajax.Request, {

        respondToReadyState: function (readyState) {

            var state = OpenLayers.Ajax.Request.Events[readyState];

            var response = new OpenLayers.Ajax.Response(this);

            if (state == 'Complete') {

                try {

                    this._complete = true;

                    (this.options['on' + response.status] ||

                    this.options['on' + (this.success() ? 'Success' : 'Failure')] ||

                    OpenLayers.Ajax.emptyFunction)(response);

                } catch (e) {

                    this.dispatchException(e);

                }


                var contentType = response.getHeader('Content-type');

            }




            try {

                (this.options['on' + state] ||

             OpenLayers.Ajax.emptyFunction)(response);

            } catch (e) {

                this.dispatchException(e);

            }


            if (state == 'Complete') {

                // Avoid memory leak in MSIE: clean up

                this.transport.onreadystatechange = OpenLayers.Ajax.emptyFunction;

            }

        }

    });

    OpenLayers.Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

 


 


Rgds,


Liam



Hi Liam, 
  
 Syntax error occurs at compile time instead of run time so you can’t debug it. You may need to check your JavaScript code while compiling. We’ll keep an eye on your reply.   
  
 Please feel free to ask us any questions while using ThinkGeo products.  
  
 Regards, 
  
 Ivan