Work around browser inconsistency in iframe URL resolution
authorJohn Firebaugh <john.firebaugh@gmail.com>
Wed, 7 Aug 2013 21:16:03 +0000 (14:16 -0700)
committerTom Hughes <tom@compton.nu>
Wed, 7 Aug 2013 21:37:38 +0000 (22:37 +0100)
Fixes systemed/iD#1672

app/views/site/id.html.erb

index ccdad95572954100104e5526a5435c68a5154e2b..53e177a3fb90a75f45c903f67bdc8c27820fb0c5 100644 (file)
         [extent[1][1],
         extent[1][0]]]);
 
-      // 0ms timeout to avoid iframe JS context weirdness.
+      // Manually resolve URL to avoid iframe JS context weirdness.
       // http://bl.ocks.org/jfirebaugh/5439412
-      parent.setTimeout(function() {
-        var hash = parent.OSM.formatHash({ lon: center[0], lat: center[1], zoom: zoom });
-        if (hash !== parent.location.hash) {
-          parent.location.replace(hash);
-        }
-      }, 0);
+      var hash = parent.OSM.formatHash({ lon: center[0], lat: center[1], zoom: zoom });
+      if (hash !== parent.location.hash) {
+        parent.location.replace(parent.location.href.replace(/#.*/, hash));
+      }
     }));
 
     parent.$("body").on("click", "a.set_position", function (e) {
@@ -63,7 +61,7 @@
 
       // 0ms timeout to avoid iframe JS context weirdness.
       // http://bl.ocks.org/jfirebaugh/5439412
-      parent.setTimeout(function() {
+      setTimeout(function() {
         id.map().centerZoom(
           [data.lon, data.lat],
           Math.max(data.zoom || 15, 13));