addControl pose un problème avec ol.control.FullScreen

Aug 18 2020

J'expérimente quelques personnalisations d'OpenLayers, quand j'essaie d'utiliser map.addControlavec ol.control.FullScreenje vois ce message d'erreur :

TypeError non intercepté : t.element.setMap n'est pas une fonction

Ce message vient de PluggableMap.js.

Je fais ça:

var map = new ol.Map({
  target: 'map',
});

var fullScreen = new ol.control.FullScreen({className: 'ol-full-screen', tipLabel: 'Toggle full-screen'});
map.addControl(fullScreen);

var scaleLine = new ol.control.ScaleLine({className: 'ol-scale-line', target: document.getElementById('scale-line')});
map.addControl(scaleLine);

var view = new ol.View({
  center: ol.proj.fromLonLat([9.25040, 45.54318]),
  zoom: 2
});
map.setView(view);

var osm = new ol.layer.Tile({
  source: new ol.source.OSM()
});
map.addLayer(osm);

Si je commente fullScreen, je peux voir sans problème la carte.

Réponses

TomazicM Aug 20 2020 at 02:36

Avec quelques expériences, il semble que ce soit un bogue OL. Le code de la question fonctionne dans IE11, Edge (nouveau) et Chrome, mais pas dans Firefox.

Heureusement, il existe une solution de contournement. Si le contrôle plein écran est ajouté en tant que contrôle de carte par défaut, il fonctionne également dans Firefox.

Le contrôle est dans ce cas ajouté à la carte comme ceci :

var map = new ol.Map({
  target: 'map',
  controls: ol.control.defaults().extend([new ol.control.FullScreen()])
});