diff --git a/src/ol/map.js b/src/ol/map.js index 136c151205..140a841f31 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -531,7 +531,7 @@ ol.Map.prototype.freezeRendering = function() { /** * Returns the geographical coordinate for a browser event. - * @param {Event|goog.events.BrowserEvent} event Event. + * @param {Event} event Event. * @return {ol.Coordinate} Coordinate. * @todo stability experimental */ @@ -542,7 +542,7 @@ ol.Map.prototype.getEventCoordinate = function(event) { /** * Returns the map pixel position for a browser event. - * @param {Event|goog.events.BrowserEvent} event Event. + * @param {Event} event Event. * @return {ol.Pixel} Pixel. * @todo stability experimental */ diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index bfd7088cd3..87a8ebad3d 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -132,6 +132,12 @@ ol.MapBrowserEventHandler = function(map) { */ this.touchstartListenerKey_ = null; + /** + * @type {goog.events.Key} + * @private + */ + this.ieDblclickListenerKey_ = null; + /** * @type {goog.events.BrowserEvent} * @private @@ -161,6 +167,11 @@ ol.MapBrowserEventHandler = function(map) { goog.events.EventType.TOUCHSTART, this.handleTouchStart_, false, this); + if (goog.userAgent.IE && !goog.userAgent.isVersionOrHigher('9.0')) { + this.ieDblclickListenerKey_ = goog.events.listen(element, + goog.events.EventType.DBLCLICK, + this.emulateClick_, false, this); + } }; goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget); @@ -190,10 +201,17 @@ ol.MapBrowserEventHandler.prototype.emulateClick_ = function(browserEvent) { this.dispatchEvent(newEvent); } else { // click + + // In IE 7-8, referring to the original event object after the current + // call stack causes "member not found" exceptions, such as in the timeout + // we use here. + var ev = /** @type {Event} */ ( + goog.object.clone(browserEvent.getBrowserEvent())); this.clickTimeoutId_ = goog.global.setTimeout(goog.bind(function() { this.clickTimeoutId_ = 0; var newEvent = new ol.MapBrowserEvent( - ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, browserEvent); + ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, + new goog.events.BrowserEvent(ev, browserEvent.currentTarget)); this.dispatchEvent(newEvent); }, this), 250); }