From c29c7cd56ce1c747a1eb2b440c1ec98f0ea65c32 Mon Sep 17 00:00:00 2001 From: Thomas Wood Date: Sun, 19 Apr 2009 21:03:41 +0000 Subject: [PATCH] Fix map in IE by deferring Vector layer addition to page load (note that deferred script running is _not_ the same as onload), also only add the Vector layer as required, so to save some overhead. I've trimmed down the unrequired options on the layer, they're defaulted from the map. Thanks firefishy for the report. --- app/views/site/index.rhtml | 3 ++- public/javascripts/map.js | 17 +++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/views/site/index.rhtml b/app/views/site/index.rhtml index 66f69960b..54f281727 100644 --- a/app/views/site/index.rhtml +++ b/app/views/site/index.rhtml @@ -111,7 +111,8 @@ end setMapExtent(bbox); <% if box %> - box = addBoxToMap(bbox); + // IE requires Vector layers be initialised on page load, and not under deferred script conditions + Event.observe(window, 'load', function() {addBoxToMap(bbox)}); <% end %> <% else %> var centre = new OpenLayers.LonLat(<%= lon %>, <%= lat %>); diff --git a/public/javascripts/map.js b/public/javascripts/map.js index 746dd5baf..6e012b3d3 100644 --- a/public/javascripts/map.js +++ b/public/javascripts/map.js @@ -75,16 +75,6 @@ function createMap(divName, options) { var numZoomLevels = Math.max(mapnik.numZoomLevels, osmarender.numZoomLevels); - vectors = new OpenLayers.Layer.Vector("Vectors", { - displayInLayerSwitcher: false, - numZoomLevels: numZoomLevels, - maxExtent: new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508), - maxResolution: 156543, - units: "m", - projection: "EPSG:900913" - }); - map.addLayer(vectors); - markers = new OpenLayers.Layer.Markers("Markers", { displayInLayerSwitcher: false, numZoomLevels: numZoomLevels, @@ -119,6 +109,13 @@ function addMarkerToMap(position, icon, description) { } function addBoxToMap(boxbounds) { + if(!vectors) { + // Be aware that IE requires Vector layers be initialised on page load, and not under deferred script conditions + vectors = new OpenLayers.Layer.Vector("Box Layer", { + displayInLayerSwitcher: false + }); + map.addLayer(vectors); + } var geometry = boxbounds.toGeometry().transform(epsg4326, map.getProjectionObject()); var box = new OpenLayers.Feature.Vector(geometry, {}, { strokeWidth: 2, -- 2.43.2