Fix map in IE by deferring Vector layer addition to page load (note that deferred...
authorThomas Wood <grand.edgemaster@gmail.com>
Sun, 19 Apr 2009 21:03:41 +0000 (21:03 +0000)
committerThomas Wood <grand.edgemaster@gmail.com>
Sun, 19 Apr 2009 21:03:41 +0000 (21:03 +0000)
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
public/javascripts/map.js

index 66f69960b496540e561f8bf50881dfe0f3210243..54f28172739f2521a33a6dfd4bddc098eb3b4230 100644 (file)
@@ -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 %>);
index 746dd5bafc51987092dabd005f01184417cb8f8b..6e012b3d30f4cd0128d58654e63d20b1a02813be 100644 (file)
@@ -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,