Start · Sprachen · JavaScript · Referenz · DOMImplementation.hasFeature()

DOMImplementation.hasFeature()

Methode

Gibt einen booleschen Wert zurück, der früher anzeigte, ob ein DOM-Feature unterstützt wird. In modernen Browsern liefert die Methode immer <code>true</code>.

seit JavaScript DOM Level 1 (veraltet; laut DOM Living Standard li deprecated seit ja Kategorie: webapi

Signatur

DOMImplementation.prototype.hasFeature(feature, version)

Beschreibung

hasFeature() gehört zum Interface DOMImplementation, das man über document.implementation erreicht. Ursprünglich sollte man damit prüfen können, ob ein Browser bestimmte DOM-Module unterstützt, etwa "Core", "HTML", "Events" oder SVG-Features wie "http://www.w3.org/TR/SVG11/feature#BasicStructure".

Das hat in der Praxis nie zuverlässig funktioniert. Browser meldeten Features als unterstützt, die sie nur teilweise oder fehlerhaft umgesetzt hatten, und umgekehrt. Deshalb schreibt der DOM Living Standard heute vor, dass hasFeature() immer true zurückgibt, egal welche Argumente übergeben werden. Die Methode gibt es nur noch aus Gründen der Abwärtskompatibilität.

In neuem Code sollte man hasFeature() nicht mehr verwenden. Besser prüft man direkt, ob eine Funktion vorhanden ist (Feature Detection), zum Beispiel mit 'fetch' in window, typeof Element.prototype.closest === 'function' oder bei CSS mit CSS.supports().

Parameter

Name Typ Default Beschreibung
$feature string Name des Features, z. B. "Core", "HTML" oder eine SVG-Feature-URI. Moderne Browser ignorieren den Wert.
$version string Version der Spezifikation, z. B. "2.0" oder "1.1". Moderne Browser ignorieren auch diesen Wert.

Beispiele

Einfacher Aufruf: liefert immer true

const impl = document.implementation;

console.log(impl.hasFeature('Core', '2.0'));
console.log(impl.hasFeature('GibtEsNicht', '99.0'));
console.log(impl.hasFeature());
true true true

Veraltete SVG-Prüfung und die moderne Alternative

// Veraltet: sagt nichts mehr aus
const svgAlt = document.implementation.hasFeature(
  'http://www.w3.org/TR/SVG11/feature#BasicStructure',
  '1.1'
);

// Modern: Funktion direkt prüfen
const svgModern =
  typeof document.createElementNS === 'function' &&
  'createSVGRect' in document.createElementNS('http://www.w3.org/2000/svg', 'svg');

console.log({ svgAlt, svgModern });
{ svgAlt: true, svgModern: true }

Alten Code umstellen: Feature Detection statt hasFeature()

// Früher: document.implementation.hasFeature('Events', '2.0')
const supports = {
  addEventListener: typeof EventTarget.prototype.addEventListener === 'function',
  fetch: 'fetch' in globalThis,
  cssGrid: typeof CSS !== 'undefined' && CSS.supports('display', 'grid'),
  intersectionObserver: 'IntersectionObserver' in window
};

console.table(supports);
Tabelle mit true/false pro Feature (in modernen Browsern meist alles true)

// Wichtig · Fallstricke

  • Veraltet: Die Methode gilt als deprecated. Laut Spezifikation gibt sie immer true zurück und eignet sich deshalb nicht für Feature Detection.
  • Alte Browser (z. B. ältere Firefox- und Internet-Explorer-Versionen) lieferten zum Teil echte, aber unzuverlässige Ergebnisse. Code, der sich auf false verlässt, verhält sich deshalb in modernen Browsern anders als erwartet.
  • Die gleichnamige Methode Node.isSupported() ist bereits aus den Browsern entfernt worden.
  • Browser-Kompatibilität: In allen aktuellen Browsern vorhanden (Baseline), aber nur noch als Stub, der immer true liefert. Linter und Browser-Werkzeuge können Warnungen zu veralteten APIs ausgeben.
  • Als Ersatz direkt auf Eigenschaften oder Methoden prüfen ('x' in obj, typeof), für CSS CSS.supports() verwenden.