diff --git a/examples/wfs-protocol.html b/examples/wfs-protocol.html
index bb8d6db85e..978d627fe6 100644
--- a/examples/wfs-protocol.html
+++ b/examples/wfs-protocol.html
@@ -22,7 +22,7 @@
url: "http://publicus.opengeo.org/geoserver/wfs",
featureType: "tasmania_roads",
featureNS: "http://www.openplans.org/topp"
- }),
+ })
});
map.addLayers([wms, layer]);
diff --git a/lib/OpenLayers/Layer/Google.js b/lib/OpenLayers/Layer/Google.js
index c6bdf4f81a..48d516cb89 100644
--- a/lib/OpenLayers/Layer/Google.js
+++ b/lib/OpenLayers/Layer/Google.js
@@ -212,22 +212,24 @@ OpenLayers.Layer.Google = OpenLayers.Class(
* evt - {Event}
*/
onMapResize: function() {
- this.windowResized = true;
if(this.visibility) {
- this.checkResize();
- }
- },
-
- /**
- * APIMethod: checkResize
- * Check if the map has been resized, and if the Google Maps object is ready for checkResize.
- * If the mapObject.getSize() equals the layer div's offset size, or if mapObject.getCenter()
- * is null, the mapObject.checkResize() will fail.
- */
- checkResize: function() {
- if (this.windowResized && this.div.style.display != "none" && this.mapObject.getCenter()) {
this.mapObject.checkResize();
- this.windowResized = false;
+ } else {
+ // workaround for resizing of invisible layers where
+ // GMap2.checkResize() does not work. We need to load all tiles
+ // for the old div size, then checkResize(), and then call
+ // layer.moveTo() to trigger GMap.setCenter() (which will finish
+ // the GMap initialization).
+ if(!this._resized) {
+ var layer = this;
+ var handle = GEvent.addListener(this.mapObject, "tilesloaded", function() {
+ GEvent.removeListener(handle);
+ delete layer._resized;
+ layer.mapObject.checkResize();
+ layer.moveTo(layer.map.getCenter(), layer.map.getZoom());
+ })
+ }
+ this._resized = true;
}
},
@@ -240,7 +242,6 @@ OpenLayers.Layer.Google = OpenLayers.Class(
*/
display: function(display) {
OpenLayers.Layer.EventPane.prototype.display.apply(this, arguments);
- this.checkResize();
this.termsOfUse.style.display = this.div.style.display;
this.poweredBy.style.display = this.div.style.display;
},
@@ -263,22 +264,7 @@ OpenLayers.Layer.Google = OpenLayers.Class(
}
OpenLayers.Layer.EventPane.prototype.removeMap.apply(this, arguments);
},
-
- /**
- * Method: moveTo
- * Handle calls to move the layer.
- *
- * Parameters:
- * bound - {}
- * zoomChanged - {Boolean} Tells when zoom has changed, as layers have to
- * do some init work in that case.
- * dragging - {Boolean}
- */
- moveTo:function(bounds, zoomChanged, dragging) {
- OpenLayers.Layer.EventPane.prototype.moveTo.apply(this, arguments);
- this.checkResize();
- },
-
+
/**
* APIMethod: getZoomForExtent
*
diff --git a/lib/OpenLayers/Tile/Image.js b/lib/OpenLayers/Tile/Image.js
index d500bd57dc..ac89ed2cf7 100644
--- a/lib/OpenLayers/Tile/Image.js
+++ b/lib/OpenLayers/Tile/Image.js
@@ -122,7 +122,8 @@ OpenLayers.Tile.Image = OpenLayers.Class(OpenLayers.Tile, {
this.imgDiv.map = null;
}
this.imgDiv.urls = null;
- this.imgDiv.src = null;
+ // abort any currently loading image
+ this.imgDiv.src = OpenLayers.Util.getImagesLocation() + "blank.gif";
}
this.imgDiv = null;
if ((this.frame != null) && (this.frame.parentNode == this.layer.div)) {
diff --git a/lib/OpenLayers/Util.js b/lib/OpenLayers/Util.js
index 4c0eab1bcf..d31c1dc6fb 100644
--- a/lib/OpenLayers/Util.js
+++ b/lib/OpenLayers/Util.js
@@ -1356,7 +1356,10 @@ OpenLayers.Util.createUrlObject = function(url, options) {
a.href = url;
//host (without port)
- urlObject.host = a.host;
+ // if we don't have a host (which is the case with URLs starting with "/"
+ // in IE), take the window location's host to match other browsers that
+ // fill in the window's location host automatically
+ urlObject.host = a.host || window.location.host;
var port = a.port;
if (port.length <= 0) {
var newHostLength = urlObject.host.length - (port.length);
@@ -1380,7 +1383,6 @@ OpenLayers.Util.createUrlObject = function(url, options) {
}
urlObject.args = OpenLayers.Util.getParameters(queryString);
-
//pathname (this part allows for relative <-> absolute comparison)
if ( ((urlObject.protocol == "file:") && (url.indexOf("file:") != -1)) ||
((urlObject.protocol != "file:") && (urlObject.host != "")) ) {
diff --git a/tests/Util.html b/tests/Util.html
index 4e92d8c2ab..9d0982933c 100644
--- a/tests/Util.html
+++ b/tests/Util.html
@@ -606,7 +606,7 @@
}
function test_Util_isEquivalentUrl(t) {
- t.plan(8);
+ t.plan(9);
var url1, url2, options;
@@ -663,7 +663,12 @@
url1 = "foo.html?bar=now#go";
url2 = "../tests/../tests/foo.html?bar=now#go";
- t.ok(OpenLayers.Util.isEquivalentUrl(url1, url2), "relative vs. absolute paths works");
+ t.ok(OpenLayers.Util.isEquivalentUrl(url1, url2), "relative vs. absolute paths works");
+
+ url1 = "/foo/bar";
+ url2 = new Array(window.location.pathname.split("/").length-1).join("../")+"foo/bar";
+
+ t.ok(OpenLayers.Util.isEquivalentUrl(url1, url2), "absolute and relative path without host works for "+url2)
}
function test_Util_createUniqueIDSeq(t) {