Start · Sprachen · JavaScript · Referenz · HTMLObjectElement.useMap

HTMLObjectElement.useMap

Eigenschaft

Liest oder setzt als String das HTML-Attribut <code>usemap</code> eines <code>&lt;object&gt;</code>-Elements. Das Attribut verweist auf eine Image-Map (<code>&lt;map&gt;</code>).

seit JavaScript Baseline: alle Browser (veraltet) deprecated seit ja Kategorie: webapi

Signatur

HTMLObjectElement.useMap

Beschreibung

Die Eigenschaft useMap des Interfaces HTMLObjectElement spiegelt das HTML-Attribut usemap wider. Liest du sie aus, bekommst du den aktuellen Attributwert als String. Weist du ihr einen Wert zu, wird das Attribut im DOM entsprechend gesetzt. Der Wert ist normalerweise ein Verweis auf den Namen einer Image-Map mit vorangestelltem Rautezeichen, zum Beispiel "#weltkarte". Er bezieht sich auf das name-Attribut eines <map>-Elements.

Mit einer Image-Map lassen sich Bereiche einer Grafik (über <area>-Elemente) als klickbare Links festlegen. Ursprünglich konnte man eine solche Map auch mit einem <object> verbinden, das eine Grafik einbettet. Im aktuellen HTML Living Standard gilt das Attribut usemap auf <object> jedoch als veraltet. Die Eigenschaft steht nur noch aus Gründen der Abwärtskompatibilität im Abschnitt „Obsolete features“.

Praktisch brauchst du useMap heute vor allem, um Altbestand auszulesen, zu analysieren oder zu migrieren. Für neue Projekte nimmst du <img usemap="#…"> mit der Eigenschaft HTMLImageElement.useMap, eine Inline-SVG mit Links oder frei positionierte Links über einer Grafik.

Parameter

Name Typ Default Beschreibung
$wert string "" Nur beim Schreiben: Der neue Wert für das Attribut usemap, üblicherweise "#name" einer <map>. Jeder Wert wird in einen String umgewandelt.

Rückgabewert

Typ
string
Beschreibung
Der aktuelle Wert des Attributs usemap. Fehlt das Attribut, ist das Ergebnis ein leerer String "", nicht null.

Beispiele

usemap-Wert eines object-Elements auslesen

// HTML:
// <object id="karte" data="karte.png" type="image/png" usemap="#regionen"></object>
// <map name="regionen">
//   <area shape="rect" coords="0,0,100,100" href="/nord" alt="Nord">
// </map>

const obj = document.getElementById('karte');
console.log(obj.useMap);

// Passende <map> anhand des Namens finden
const mapName = obj.useMap.replace(/^#/, '');
const map = document.querySelector(`map[name="${CSS.escape(mapName)}"]`);
console.log(map ? map.areas.length : 'keine Map gefunden');
#regionen 1

Wert setzen und Attribut-Spiegelung prüfen

const obj = document.createElement('object');
obj.data = 'grafik.png';
obj.type = 'image/png';

console.log(JSON.stringify(obj.useMap)); // Attribut fehlt noch

obj.useMap = '#navigation';
console.log(obj.getAttribute('usemap'));

obj.removeAttribute('usemap');
console.log(JSON.stringify(obj.useMap));
"" #navigation ""

Altbestand migrieren: object mit usemap durch img ersetzen

// Alle <object>-Elemente mit Image-Map durch <img> ersetzen,
// weil usemap auf <object> veraltet ist
const migriereImageMaps = () => {
  const kandidaten = [...document.querySelectorAll('object[usemap]')];

  for (const obj of kandidaten) {
    const img = document.createElement('img');
    img.src = obj.data;
    img.useMap = obj.useMap;           // Verweis übernehmen
    img.alt = obj.getAttribute('aria-label') ?? obj.textContent.trim();
    if (obj.width) img.width = Number(obj.width);
    if (obj.height) img.height = Number(obj.height);
    obj.replaceWith(img);
  }

  return kandidaten.length;
};

console.log(`${migriereImageMaps()} Element(e) migriert`);
1 Element(e) migriert

// Wichtig · Fallstricke

  • Veraltet: Der HTML Living Standard führt usemap auf <object> und die Eigenschaft HTMLObjectElement.useMap nur noch unter „Obsolete features“. Nutze sie in neuem Code nicht. Die Browser stellen die Eigenschaft zwar weiterhin bereit, aber ob die Image-Map bei eingebetteten Objekten tatsächlich funktioniert, ist uneinheitlich und schlecht getestet.
  • Kein automatisches #: Die Eigenschaft gibt den Attributwert unverändert zurück, ob mit oder ohne Raute. Beim Suchen der passenden <map> entfernst du die Raute selbst und maskierst den Namen am besten mit CSS.escape().
  • Leerer String statt null: Ohne Attribut liefert useMap den Wert "". Willst du prüfen, ob das Attribut überhaupt vorhanden ist, nimm hasAttribute('usemap').
  • Barrierefreiheit: Image-Maps brauchen für jede <area> ein aussagekräftiges alt. Außerdem passen sie sich nicht an die Bildgröße an, weil die coords in Pixeln angegeben sind. Für flexible Layouts ist Inline-SVG meist die bessere Wahl.