Page 1 sur 1
Erreur HTML qui bloque mon script avec XmlHttpRequest
Publié : 02 sept. 2009, 14:33
par mindless
Bonjour a tous,
Je développe actuellement une extension firefox qui utilise entre autres une partie AJAX (XmlHttpRequest) pour étudier la structure d'une page web distante.
Cependant, avec certaines pages, mon script se bloque a cause d'une erreur HTML dans la page distante.
(Ex : Erreur : balise ne correspondant pas. Attendu : </div>.
Fichier Source :
http://forums.mozillazine.org/viewtopic ... &t=1454505
Ligne : 98, Colonne : 30
Code Source : <div class="inner"></span></span>)
Cette erreur n'apparait uniquement quand je charge la page via XmlHttpRequest (cad pas si je l'ouvre direct dans firefox)
Je développe avec un profil de développement, donc avec les options suivantes :
javascript.options.showInConsole = true.
nglayout.debug.disable_xul_cache = true.
browser.dom.window.dump.enabled = true.
javascript.options.strict = true
Comment faire pour ignorer cette erreur, ou pour continuer l'exécution de mon script malgré celle-ci ?
(Je précise que j'ai un try/catch autour de la récupération et l'analyse du document chargé et que je ne catch aucune erreur)
Merci d'avance.
Re: Erreur HTML qui bloque mon script avec XmlHttpRequest
Publié : 02 sept. 2009, 17:30
par calimo
mindless a écrit :Bonjour a tous,
Je développe actuellement une extension firefox qui utilise entre autres une partie AJAX (XmlHttpRequest) pour étudier la structure d'une page web distante.
Cependant, avec certaines pages, mon script se bloque a cause d'une erreur HTML dans la page distante.
(Ex : Erreur : balise ne correspondant pas. Attendu : </div>.
Fichier Source :
http://forums.mozillazine.org/viewtopic ... &t=1454505
Ligne : 98, Colonne : 30
Code Source : <div class="inner"></span></span>)
Cette erreur n'apparait uniquement quand je charge la page via XmlHttpRequest (cad pas si je l'ouvre direct dans firefox)
Cela me semble parfaitement normal, comme son nom l'indique, XmlHttpRequest attend du XML, pas une soupe de balises.
Peux-être peut-tu regarder du côté de document.load ou quelque chose comme ça ?
https://developer.mozilla.org/en/DOM/document.load
PS : si c'est une extension, pourquoi ne pas avoir posté dans la rubrique
développement d'applications gecko
Re: Erreur HTML qui bloque mon script avec XmlHttpRequest
Publié : 02 sept. 2009, 18:41
par mindless
Merci de ta réponse.
En effet, comme la réponse attendue est du Xml, ca parait normal que ca soit mal accepté, je croyais que l'interprétation était la même que pour une page web normal : un document DOM dont l'interprétation serait la même que celle du navigateur.
Par contre, dans le lien que tu me signale, le MDC dit en introduction que document.load et document.async (version asynchrone) ne sont plus supportés et qu'il faut utiliser XmlHttpRequest a la place. XmlHttpequest semble donc être la manière standard de lire un document de type DOM.
Y aurait-il une manière d'ignorer les erreurs HTML (comme le fait le navigateur lui-même puisque la page ne renvoie pas d'erreur quand je la visionne depuis FF directement) ?
Certes la structure du document n'est plus valide mais comme j'utilise des getElementsById la plupart du temps pour récupère les éléments, ca ne devrait pas me poser de problème.
Merci d'avance.
PS : J'ai préféré posté dans Développement Web parce que mon sujet pourrait aussi bien poser problème dans un script classique (avec AJAX) que dans une extension. Si mon sujet n'a pas la place ici, dites-le moi !
EDIT : Après plus de recherche je suis tombé sur une méthode loadHTML en PHP qui serait plus permissive qu'un interpréteur XML ou XHTML strict. J'ai beau chercher, je ne trouve pas de méthode similaire en Javascript, dommage ...
Re: Erreur HTML qui bloque mon script avec XmlHttpRequest
Publié : 03 sept. 2009, 09:19
par Benoit
Si je comprends bien ce que tu expliques, il faudrait servir ta page distante en text/html.
Sinon je te conseillerais d'utiliser tout simplement du code HTML et la fonction DOM innerHTML pour injecter ça dans ta page. Certains appellent ça la
technologie AHAH même si ce n'en est pas une
En fait c'est tout simplement n'utiliser que XMLHttpRequest sans XML et sans interprétation en JavaScript.
Re: Erreur HTML qui bloque mon script avec XmlHttpRequest
Publié : 03 sept. 2009, 10:13
par mindless
Merci de ta réponse, je vais chercher un peu de ce coté.
Le problème c'est que je ne souhaite pas intégrer la page dans une page existante mais juste pouvoir étudier et parcourir le DOM de la page (pas d'affichage). J'ai donc besoin de le charger en tant que DOM.
Pour l'instant j'essaye de charger ma page entière dans un document DOM vide (créé avec document.implementation.createDocument) mais ca ne marche pas, j'ai donc créé un premier nœud html pour ensuite insérer ma page dedans, en espérant que innerHTML soit assez permissif pour me permettre cette erreur volontaire de syntaxe...
Ca n'a pas l'air de marcher vraiment, la technique a l'air de s'appliquer juste a des portions de code et non a des pages complètes, en effet, c'est illogique d'insérer une page entière dans un élément d'un DOM déjà construit !
Si quelqu'un a d'autres idées, ou des précisions sur celle-ci, les suggestions sont bienvenues !
Merci d'avance.
EDIT : J'ai réussi a charger le document (bien qu'il soit incorrect puisqu'il a 2 nœuds HTML) mais tout le code ajouté avec innerHTML n'est pas interprété, il est ignoré et considéré comme du simple texte.
Re: Erreur HTML qui bloque mon script avec XmlHttpRequest
Publié : 04 sept. 2009, 09:25
par martin
A mon avis le plus simple pour du HTML, ou si tu ne sais pas quel va être le type de contenu, c'est de passer par un iframe invisible (plutôt que par XMLHttpRequest). Il y a un exemple complet là :
https://developer.mozilla.org/en/Code_s ... TML_to_DOM
Comme tu codes pour une extension, tu peux utiliser l'événement DOMContentLoaded plutôt que onload dans cet exemple.