10 votes

Existe-t-il un remplacement pour document.execCommand ? (ou peut-on utiliser document.execCommand en toute sécurité ?)

Je suis en train de construire un éditeur de texte riche amateur avec du JavaScript vanille et document.execCommand() est essentiel pour activer les fonctionnalités de base d'un éditeur de texte.

Par exemple, les commandes de mise en gras, d'italique et de liste non ordonnée :

Array.from(toolbarBtn).forEach(btn => {
  btn.addEventListener('click', (e) => {
    e.preventDefault();
    if (e.target.id === "toolbar__btn--bold") {
      format('bold');
    }
    if (e.target.id === "toolbar__btn--italic") {
      format('italic');
    }
    if (e.target.id === "toolbar__btn--unorderedlist") {
      format('insertunorderedlist');
    }
});
});

Cependant, en recherchant cette commande sur MDN Web Docs, j'ai vu que cette commande est considérée comme obsolète :

Obsolète Cette fonction est obsolète. Bien qu'elle puisse encore fonctionner dans certains navigateurs, son utilisation est déconseillée car elle peut être supprimée à tout moment. Essayez d'éviter de l'utiliser.

Je me demande donc s'il existe une méthode de remplacement dans le JavaScript vanille, qui pourrait créer toutes les fonctionnalités de l'éditeur de texte riche comme le fait execCommand() ?

La recherche sur Google ne m'a donné aucun résultat, alors en même temps, je me demande comment il est possible que la méthode soit annoncée comme obsolète, mais qu'aucune alternative ne soit suggérée.

8voto

sideshowbarker Points 29042

La modification du marquage MDN document.execCommand() comme obsolète et une modification correspondante à https://github.com/mdn/browser-compat-data/commit/2d3890a ont été réalisées en partie grâce à https://w3c.github.io/editing/ActiveDocuments/execCommand.html avec un grand avertissement rouge comportant les mentions suivantes :

Cette spécification est incomplète et il n'est pas prévu qu'elle dépasse le statut de projet. Les auteurs ne devraient pas utiliser la plupart de ces fonctionnalités directement, mais plutôt utiliser des bibliothèques d'édition JavaScript. Les fonctionnalités décrites dans ce document ne sont pas mises en œuvre de manière cohérente ou complète par les agents utilisateurs, et il n'est pas prévu que cela change dans un avenir prévisible.

En ce qui concerne les méthodes de remplacement dans le JavaScript vanille, la même boîte d'avertissement indique qu'il s'agit d'une méthode de remplacement :

a prédit qu'à l'avenir, ces deux spécifications seront remplacées par des contenus modifiables et des événements d'entrée.

mais malheureusement, nous n'en sommes pas encore là. La situation actuelle est donc regrettable : même si nous n'avons pas encore de remplaçant, nous savons que document.execCommand() tel quel ne fonctionne pas de manière interopérable entre les navigateurs - et les projets de navigateurs ne vont pas y remédier. C'est pourquoi l'avertissement du MDN dit :

son utilisation est déconseillée Essayez de ne pas l'utiliser.

Ainsi, comme le dit un commentaire ci-dessus, c'est un peu comme dans le cas du glisser-déposer : On sait qu'il est cassé de plusieurs façons, et il en est ainsi depuis longtemps parce qu'il n'est pas pratique de le réparer.

C'est pourquoi l'encadré rouge d'avertissement dans la spécification indique également que les développeurs et les auteurs :

ne devrait pas utiliser la plupart de ces fonctionnalités directement, mais plutôt utiliser des bibliothèques d'édition JavaScript

Les bibliothèques d'édition JavaScript disponibles dans les outils d'édition de texte riche en ligne tels que CKEditor et TinyMCE "couvrent" toutes les faiblesses sous-jacentes de l'application document.execCommand() pour vous. Si vous deviez essayer d'écrire votre propre gestion robuste pour document.execCommand() en JavaScript vanille à partir de zéro, vous finiriez, après beaucoup de travail et de temps, par répéter le travail effectué pour créer les bibliothèques JavaScript sous-jacentes à ces outils.

La conclusion est donc la suivante : pour vous épargner beaucoup de temps et de travail, utilisez l'une des bibliothèques disponibles.

4voto

Martin Meeser Points 493

Il semble que la nouvelle norme sera Événements d'entrée Niveau 2 .

De mon point de vue, il tente de résoudre les problèmes de execCommand.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X