JavaScript : écrire dans un fichier texte sans effacer le contenu avec ActiveXObject

Vous voulez sauvegarder localement des données depuis une page web (par exemple : résultats d'un petit jeu de mots) sans écraser le contenu existant du fichier texte ? Plusieurs approches existent selon l'environnement (navigateur, serveur, Node.js, ou environnement Windows ancien avec ActiveX). Ci‑dessous une présentation détaillée des possibilités, contraintes et exemples, en privilégiant les solutions qui permettent d'ajouter des lignes à un fichier sans effacer ce qui s'y trouve.

Contexte et problématique

Dans un navigateur moderne, l'écriture directe sur le disque client est volontairement limitée pour des raisons de sécurité : en frontend vous ne pouvez pas écrire arbitrairement sur le poste client sans l'accord explicite de l'utilisateur. Si vous cherchez à stocker des lignes de texte sur la machine de l'utilisateur (pour des stats, logs, sauvegardes locales…), il faut connaître les options et leurs contraintes.

Options possibles

  • Solution serveur (recommandée pour production) : envoyer les données au serveur via AJAX ou un formulaire POST, puis laisser le serveur écrire ou append (ajouter) au fichier ou en base de données. Côté serveur, on peut utiliser PHP, Node.js (module fs), Java (servlet + fileupload), etc.
  • Node.js (local ou serveur) : si vous contrôlez l'environnement (application desktop Electron, script local, serveur), Node.js propose le module fs pour appendFile(), writeFile(), readFile(), rename(), unlink(), etc. C'est la voie la plus simple et sécurisée pour manipuler des fichiers côté serveur ou dans une appli locale.
  • API Web modernes côté client : File System Access API (chrome/edge) permet à l'utilisateur d'accorder l'accès à un fichier et ensuite de lire/écrire (avec permission explicite). Cela nécessite l'interaction de l'utilisateur (sélection du fichier / permission) et n'est pas universel sur tous les navigateurs et mobiles.
  • Téléchargement d'un fichier modifié : construire côté client le contenu mis à jour et proposer le téléchargement (création d'un blob et link download). L'utilisateur devra remplacer ou enregistrer le fichier manuellement.
  • ActiveXObject (ancienne solution Windows / Internet Explorer) : permet d'écrire directement sur le disque client en COM si les paramètres de sécurité autorisent ActiveX (très dangereux et obsolète). Peut être utilisé pour appending de ligne dans un environnement contrôlé (Intranet, IE configuré).

Pourquoi ActiveXObject apparaît dans les recherches

ActiveXObject (Scripting.FileSystemObject) est une technique historique pour manipuler des fichiers depuis IE : elle permet d'ouvrir un fichier en mode append et d'y écrire sans écraser le contenu existant. Cependant :

  • Cela ne fonctionne que sous Internet Explorer (Windows) avec les paramètres de sécurité qui autorisent les contrôles ActiveX.
  • Très fortement déconseillé pour des usages publics : risques de sécurité et compatibilité inexistante avec les navigateurs modernes et mobiles.
  • Peut être encore pertinent uniquement dans des environnements intranet contrôlés où toutes les machines utilisent IE et acceptent ActiveX.

Exemple conceptuel avec ActiveXObject (IE uniquement)

Dans un environnement où ActiveX est permis, on peut obtenir un FileSystemObject, ouvrir le fichier en mode ajout (append) et écrire une ligne. L'idée : ouvrir le fichier en mode 8 (ForAppending) pour ne pas écraser.

Exemple de logique (phrases issues du matériau) :

Lire aussi: guide pour ajouter une valeur dans une colonne via un trigger

  • La méthode fs.appendFile() est utilisée pour ajouter le contenu à la fin du fichier. Si le fichier n'existe pas dans le chemin donné, elle en crée un nouveau.
  • La gestion des fichiers comprend différentes opérations telles que la création, la lecture, la mise à jour, le renommage et la suppression.
  • Si le fichier n’existe pas dans le chemin donné, un nouveau fichier vide sera créé.

Remarque importante : ici on cite le comportement attendu (ajout) mais ActiveXObject utilise l'objet FileSystemObject et sa méthode OpenTextFile en mode 8 (ForAppending) pour cet objectif. Le code exact n'est pas reproduit pour des raisons de sécurité, mais la mécanique est la même que celle décrite pour appendFile() en Node.js : ouvrir en mode ajout et écrire.

Alternative sûre et moderne : envoyer au serveur (AJAX ou POST)

Si l'objectif est de collecter des informations depuis un navigateur et de les centraliser (servlet, base de données), la solution la plus simple et portable est d'envoyer les données au serveur et de laisser le serveur gérer l'écriture. Comme expliqué :

  • Il n'y a pas besoin d'AJAX pour écrire un tableau dans le code source, mais pour une application interactive, l'AJAX côté client au début de la session pour charger un dictionnaire, ou pour envoyer de petites mises à jour, est naturel et intégré en JavaScript.
  • Si tu utilises javascript, Ajax est intégré ? Une requête AJAX (jquery ou en vanillaJS) envoie les paramètres au serveur. Il suffira d'associer la valeur du fichier à une variable JS via PHP (ou lire le contenu avec l'objet JSON en JS) et de travailler directement avec ça au lieu d'avoir la contrainte de l'écrire dans le HTML.
  • Si c'est un fichier texte/dictionnaire «bête», garde le fichier texte côté serveur et fais un simple split() du responseText pour le convertir en tableau JavaScript côté client.

Node.js : méthode recommandée pour apps locales ou serveur

Si vous pouvez exécuter du code côté serveur ou localement (Electron, script), Node.js offre le module fs avec des méthodes bien adaptées :

  • fs.appendFile() pour ajouter au fichier (si n'existe pas, il crée le fichier)
  • fs.writeFile() pour écrire (écrase par défaut)
  • fs.readFile() pour lire le contenu
  • fs.open() pour ouvrir le fichier dans un mode donné (ajout, lecture, écriture)
  • fs.rename(), fs.unlink() pour renommer et supprimer

Comme le matériau l'indique : «Vous êtes maintenant familiarisé avec les différentes méthodes de manipulation de fichiers du module fs (système de fichiers). Vous pouvez effectuer la plupart des opérations sur les fichiers en utilisant les méthodes que vous avez vues dans ce tutoriel.»

File System Access API (Web moderne)

Sur les navigateurs qui la supportent, la File System Access API permet, après consentement explicite, d'ouvrir un fichier et de le modifier directement. Points clés :

Lire aussi: Choisir le bon condensateur pour une alimentation LED sans transformateur

  • L'utilisateur doit sélectionner le fichier (dialogue) et accorder la permission.
  • Permet de lire, écrire, et ajouter sans passer par un serveur si le navigateur supporte l'API.
  • La compatibilité n'est pas universelle - attention aux mobiles et à certains navigateurs.

Technique «download» côté client pour sauvegarde locale

Construire côté client le contenu mis à jour (par concaténation ou en ajout d'une ligne) et générer un blob pour proposer le téléchargement. L'utilisateur sauvegarde manuellement le fichier. C'est sécurisé et compatible partout mais nécessite une action manuelle de l'utilisateur pour remplacer ou enregistrer.

Cas pratique : faire un petit jeu de mots et stocker les résultats

Pour un jeu HTML + jQuery + CSS qui tire des lettres aléatoirement et collecte des stats :

  1. Charger le dictionnaire : si c'est «quelques milliers de mots», vous pouvez l'embarquer dans le HTML (via un div encodé ou un fichier .js contenant var dict = [...]) ou charger via AJAX le fichier texte et faire responseText.split() pour obtenir le tableau. «Si tu ne veux pas les récupérer par AJAX, il faut les mettre dans ton document HTML, ou dans une ressource chargée avec ton document.»
  2. Collecter les résultats côté client : stocker temporairement dans un tableau JS. «Il suffira d'associer la valeur du fichier à une variable JS via PHP (ou lire le contenu avec l'objet JSON en JS) et de travailler directement avec ça.»
  3. Envoyer les stats : pour historique et analyse, envoyer via AJAX POST vers une servlet/PHP qui fera l'append dans un fichier serveur ou en base.
  4. Si vous souhaitez absolument écrire sur la machine cliente : demandez à l'utilisateur d'ouvrir un fichier via File Input ou via la File System Access API afin d'avoir la permission d'écrire (ou proposez le téléchargement du fichier mis à jour).

Remarques tirées du matériau : «En frontend, tu ne peux pas le faire directement. Obligatoirement, tu dois passer par une technologie serveur.» et «Si tu veux rester en JS, je t'invite à regarder le module fs (file system) que propose nodeJS.»

Contraintes pratiques et recommandations

  • Ne comptez pas sur ActiveX pour une application publique : obsolète et dangereux.
  • Utilisez AJAX + serveur pour centraliser et append facilement - côté serveur, écrire dans un fichier texte est simple et fiable.
  • Pour des applications locales contrôlées, Node.js (fs.appendFile) ou Electron sont les options modernes.
  • Si l'utilisateur doit fournir un fichier depuis son poste : le file input HTML ou la File System Access API sont nécessaires ; il faut l'accord explicite de l'utilisateur.
  • Format des données : préférez JSON pour la structuration et la manipulation facile, CSV si besoin d'interopérabilité. «csv, c'est très bien, mais json, c'est mieux, plus rapide et plus facile à gérer.»

Tableau récapitulatif des méthodes et contraintes

Méthode Peut ajouter sans effacer ? Permet d'écrire sur la machine cliente ? Compatibilité / remarques
ActiveXObject (FileSystemObject) Oui (open append) Oui (si activé) IE only, obsolète, risques de sécurité
Node.js fs.appendFile() Oui Oui si script local/serveur (contrôlé) Serveur/Electron/CLI. Recommandé pour apps locales/serveur
AJAX → serveur (PHP/servlet) Oui (côté serveur append) Indirectement (serveur stocke) Portable, sécurisé, recommandé pour web public
File System Access API Oui (avec permission) Oui (après consentement) Compatible sur certains navigateurs modernes
Blob + download Oui (construire nouveau fichier avec ancien contenu + ajout) Non automatique - l'utilisateur télécharge Universellement compatible, nécessite action utilisateur

Bonnes pratiques pour implémenter l'append

  • Si vous stockez un dictionnaire ou des mots, préférez JSON ou un simple fichier texte côté serveur, puis chargez-le via AJAX et faites un split() côté client pour construire un tableau.
  • Pour l'archivage de logs/statistiques : envoyez des paquets (batch) au serveur et append côté serveur pour éviter la perte de données et pour gérer la concurrence.
  • Sur poste client non contrôlé : n'essayez pas d'utiliser ActiveX ; préférez la File System Access API ou le téléchargement.
  • Si vous utilisez PHP côté serveur : préparez une route qui append au fichier lors de la réception d'un POST. Si vous avez eu des problèmes pour détecter le clic du bouton, gérez l'événement JS et déclenchez une requête asynchrone (AJAX) sans bloquer l'interface.

Exemples d'usage évoqués

Quelques fragments de bonnes idées issues du matériau :

  • «Si tu n'as pas d'AJAX, mets tout tel quel dans un <div> via php, puis insères une petite fonction javascript en fin de fichier HTML qui lira le innerHTML de ton div, et le rangera dans un tableau javascript.»
  • «Je garderais le fichier texte tel quel, car facile à mettre à jour, je récupérerais le contenu via un bout d'AJAX côté client en début de session sans aucun traitement côté serveur, et je finirais par un simple split() javascript du responseText en le rangeant dans un tableau js.»
  • «Pour comprendre la mécanique, je fais passer des paramètres par l'url. En l'occurence, l'id de la ligne dans le json !»

🔴 DIRECT CRPPF 2026 - 24e JOUR DE LA CROISADE POUR LE RENVERSEMENT DES PRINCIPAUTES

Enfin, retenez que JavaScript côté client a des limites imposées par la sécurité du navigateur. Pour écrire durablement et centraliser des données, la voie serveur (AJAX + append côté serveur) ou l'utilisation d'un environnement contrôlé (Node.js / Electron) reste la solution la plus robuste. ActiveXObject, bien que permettant l'append sur la machine cliente, n'est plus une option viable pour des applications modernes distribuées publiquement.

Lire aussi: Comment obtenir plus de schémas de craft

balises:

Articles populaires: