11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

je suis en train de réaliser un pseudo-navigateur en PHP.
upload/3156-phpbrowser.gif

Afin d'améliorer l'ergonomie, j'aimerai pouvoir réaliser les opérations suivantes :
- Déclencher des événements javascript à partir d'une fonction
- Enregistrer une portion de mon document (le contenu de la source HTML) dans un fichier (lancer, côté client, un genre de commande "sauvegarder sous" ?)
- Afficher dans une iframe le contenu HTML de la page appelée, sans exécuter le javascript, ni appeler les images et autres fichiers distants, objets flash, etc.
- Rendre les liens dans cette iframe non cliquables, ou déclencher au clic une action qui va paramétrer la fenêtre parente (pas très clair, tout ça...)
- Autoriser le "défilement" ou la copie du texte des zones <input type="disabled"/> (certains champs sont trop courts pour afficher tout le texte)
- Réaliser une fonction "copie vers le presse-papier" qui fonctionne sous firefox ?

Je subodore que la moitié de tout ça n'est techniquement pas réalisable, mais qui sait...

Au passage, si un CSSeur qui a un peu de temps à perdre est intéressé...

Cordialement,
elvex
Modifié par elvex (07 Aug 2006 - 02:51)
Bonjour,

Une grande partie de tes questions me semlent avoir leur réponse dans le traitement côté serveur, et non côté client.

elvex a écrit :
Enregistrer une portion de mon document (le contenu de la source HTML) dans un fichier (lancer, côté client, un genre de commande "sauvegarder sous" ?)


Il ne sera pas possible de manipuler le contenu de la page pour n'en enregistrer qu'une partie. La solution classique est de faire un lien vers la seule source HTML souhaitée, avec un type de contenu forçant le navigateur à proposer l'enregistrement ou l'ouverture.

Sinon, certaines configurations d'Opera peuvent permettre l'enregistrement du contenu d'un <iframe> depuis le menu contextuel (clic droit et enregistrer sous), mais cela ne peut pas être appelé via javascript, et je suppose que ton application vise plutôt Firefox...

elvex a écrit :

- Afficher dans une iframe le contenu HTML de la page appelée, sans exécuter le javascript, ni appeler les images et autres fichiers distants, objets flash, etc.


Tu peux aisément ajouter à la source de l'<iframe> une feuille de style éliminant (display:none) les éléments <img>, <object>, <embed> etc... En revanche, cela ne résoudra pas le problème des scripts. La solution "robuste" consiste plutôt à retraiter la source côté serveur.

elvex a écrit :

- Rendre les liens dans cette iframe non cliquables, ou déclencher au clic une action qui va paramétrer la fenêtre parente (pas très clair, tout ça...)


Tu peux retraiter les liens via... un javascript. Mais là encore, le retraitement de la source côté serveur serait plus simple.

elvex a écrit :

- Autoriser le "défilement" ou la copie du texte des zones <input type="disabled"/> (certains champs sont trop courts pour afficher tout le texte)


Il suffit d'utiliser readonly au lieu de disabled:

<input type="text" readonly="readonly" value="..." size="25" />

Modifié par Laurent Denis (07 Aug 2006 - 06:21)
Laurent Denis a écrit :
je suppose que ton application vise plutôt Firefox...

J'avoue... (honte à moi Smiley smile )

Laurent Denis a écrit :
Il ne sera pas possible de manipuler le contenu de la page pour n'en enregistrer qu'une partie. La solution classique est de faire un lien vers la seule source HTML souhaitée, avec un type de contenu forçant le navigateur à proposer l'enregistrement ou l'ouverture.

A ce que je lis, il est possible de forcer le téléchargement d'un fichier à l'aide de headers spécifiques.
Le problème est que ledit "contenu" n'est pas sauvegardé de façon statique : le pseudo-navigateur envoie une requête HTTP, réceptionne la réponse et l'affiche dans la page. Une solution pourrait être d'écrire un formulaire contenant la source à enregistrer. La validation envoie en POST le contenu, à destination d'un "fichier virtuel" PHP qui simulerait le fichier à télécharger. Peut-être un peu lourd, mais ça peut marcher.
Le "fichier virtuel" ressemblerait donc à :
<?php
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=monfichier.txt");
echo $_POST['data'] ;
?>

Laurent Denis a écrit :
Tu peux aisément ajouter à la source de l'<iframe> une feuille de style éliminant (display:none) les éléments <img>, <object>, <embed> etc... En revanche, cela ne résoudra pas le problème des scripts. La solution "robuste" consiste plutôt à retraiter la source côté serveur.
Tu peux retraiter les liens via... un javascript. Mais là encore, le retraitement de la source côté serveur serait plus simple.

En fait, c'est plutôt un problème de conception, là. L'idée est de réaliser un navigateur axé sur la couche HTTP, tout en facilitant l'écriture des requêtes et la lecture des réponses.
Il serait sans doute plus correct de proposer une arborescence des données HTML.

Quoi qu'il en soit, merci pour ces réponses !

Cordialement,
elvex