Signatur
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());
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 });
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);
// Wichtig · Fallstricke
- Veraltet: Die Methode gilt als deprecated. Laut Spezifikation gibt sie immer
truezurü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
falseverlä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
trueliefert. 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 CSSCSS.supports()verwenden.