Comment vérifier la prise en charge du navigateur pour les fonctionnalités / événements?

Auparavant, nous utilisions le sniffing de navigateur pour déduire si certains événements ou fonctionnalités étaient disponibles. Je comprends que le sniffing de navigateur a été «déconseillé» ou «évité» en faveur du sniffing de fonctionnalité. Je voudrais savoir comment je peux vérifier si un certain événement peut être géré.

Prenez DOMNodeInserted par exemple. Il est pris en charge par Chrome, FF et Safari, mais pas par IE. Comment puis-je renifler si cet événement est disponible? Y a-t-il une bibliothèque présente? Comment faites-vous la bonne fonction reniflant?

Vous ne pouvez pas détecter les mutations, et modernizr ne fonctionne pas pour cela (puisque les gens vont cracher cela comme la réponse de fait).

Le seul moyen de “détecter” la prise en charge d’événements de mutation est d’essayer de déclencher l’événement. Pseudo code:

 var div = document.createElement('div'), supported = false; div.addEventListener('DOMNodeInserted', function(){ supported = true; }); div.appendChild(div.cloneNode(true)); 

Notez que le code ci-dessus ne fonctionnera pas tel quel s’il est en code linéaire car l’écouteur d’événements est asynchrone. L’idée générale est valable, cependant, peut-être mieux implémenté avec un rappel.

Pour répondre au générique – comment utiliser le sniffing – j’utilise l’object jQuery.support .