IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[info] document.all / document.childNodes


Sujet :

JavaScript

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [info] document.all / document.childNodes
    Hello,

    Je suis en train de faire une série de tests de compatibilité. Je constate une fois de plus que le développement web et en particulier ceux qui développent les navigateurs font vraiment un grand n'importe quoi...

    J'ai noté les différences suivantes qui me paraissent intéressantes à vous communiquer.

    L'objectif est de récupérer la totalité du contenu d'une page HTML.

    document.all supporté (mais différemment)
    Pour I.E.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var totalHTML = window.document.all[1].outerHTML;
    pour opera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var totalHTML = window.document.all[0].outerHTML;

    Pour Firefox & Netscape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var totalHTML = '<html>' + window.document.childNodes[1].innerHTML + '</html>';
    Ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function getTotalHTML(d) {
    	//d est un document
    	// ex : window.document
    	// ou : window.parent.frames["maframe"].document
    	if (window.document.all) {
    		var s = new String(d.all[1].outerHTML)
    		if (s.substr(0,5).toLowerCase() == "<html") {
    			return s
    		} else {
    			return d.all[0].outerHTML
    		}
    	} else {
    		return '<html>' + d.childNodes[1].innerHTML	+ '</html>'
    	}
    }
    bonne lecture...

    @+

    Laurent

  2. #2
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    tu peux pas te servir du documentElement plutot ?

  3. #3
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: [info] document.all / document.childNodes
    Citation Envoyé par Laurent Jordi
    Pour Firefox & Netscape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var totalHTML = '<html>' + window.document.childNodes[1].innerHTML + '</html>';
    Et quelque chose de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var totalHTML = window.document.documentElement.innerHTML;
    Parceque childNodes de 1, ça dépends quand même fortement de ta page...

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut Ca n'est sûrement pas universel
    Ça n'est sûrement pas universel, toutefois, dans mon cas ça marche. Je pense qu'il est nécessaire de tester avec les indexes avant d'utiliser ce script.

    N'ayant pas trouvé de solution toute faite, ni ici, ni sur le net, j'ai fait ma propre tambouille, je vous en fait profiter, si vous voulez l'améliorer n'hésitez pas et surtout, publiez le résultat.

    Bien à vous

    Laurent

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut a tester
    Citation Envoyé par siddh
    tu peux pas te servir du documentElement plutot ?
    Je ne sais pas je n'est pas testé.

    Bien à toi

    Laurent

  6. #6
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    c est ce que t as proposé denisC sauf qu il faut que tu rajoutes tes <html></html> autour.

    Ca marche avec ie et ffx, les autres je sais pas

  7. #7
    CUCARACHA
    Invité(e)
    Par défaut Re: a tester
    Citation Envoyé par Laurent Jordi
    Citation Envoyé par siddh
    tu peux pas te servir du documentElement plutot ?
    Je ne sais pas je n'est pas testé.

    Bien à toi

    Laurent
    J'ai testé, ça a l'air de fonctionner uniquement avec le innerHTML. Il faut donc rajouter '<html>' et '</html>' devant et derrière.

    Merci @+

    Laurent

  8. #8
    CUCARACHA
    Invité(e)
    Par défaut Problème
    Ca marche partout, cependant, mon objectif était de recréer une sorte de readyState.

    Pour ce faire, j'ai créé un timer qui contrôle le contenu de la page toutes les 500 ms et qui recherche la balise </html> en conséquence, si on la rajoute à la main, ça ne marche plus.

    méditer là dessus je dois...

    Bien à vous

    Laurent

  9. #9
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Par défaut
    et le window.onload peut pas te servir ? il est declenché justement a la fin du chargement de la page

  10. #10
    CUCARACHA
    Invité(e)
    Par défaut Ben c'est un peu compliqué...
    J'explique,

    Je dois construire mail. Ce mail n'a pas le même contenu en fonction du destinataire. En conséquence, j'ai créé une page indépendante qui génère ces différents contenus.

    La fonction qui exécute la séquence, démarre sur onLoad et génère le contenu du mail dans une frame. Lorsque cette dernière est totalement chargée, elle récupère le contenu HTML, remplace les < et les > par des [ et des ] puis envoie le tout à une page aspx générique qui émet tous mes mails (la transformation des <> en [] est un contournement d'une sécurité de IIS).

    Tout ceci fonctionne parfaitement sous IE. c'est même assez joli comme mécanique. Le problème est que ça se complique pas mal sur les autres navigateurs. Firefox semble ne pas très bien exécuter le onload, opéra réagit a sa manière, bref c'est du peaufinage. Si ça ne marche pas je demanderais aux 8% d'utilisateurs qui n'aiment pas I.E de passer outre leur dégoût et d'utiliser ce navigateur...

    @+

    Laurent

  11. #11
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: Ben c'est un peu compliqué...
    Citation Envoyé par Laurent Jordi
    Je dois construire mail. Ce mail n'a pas le même contenu en fonction du destinataire. En conséquence, j'ai créé une page indépendante qui génère ces différents contenus.
    Euh, il me semble que générer des mails, ça serait plus un travail à faire sur ton serveur que sur ton client.
    De plus, ça t'évite tous les soucis que tu as actuellement de compatibilité des clients....

  12. #12
    CUCARACHA
    Invité(e)
    Par défaut Je suis d'accord...
    Je suis d'accord avec toi, cependant, le système d'envoi de mail est une "brique" générique de mon système. Elle est utilisée par de nombreuses fonctionnalités de l'ensemble.

    Son appel est super simple, sa maintenance super facile. Je n'ai pas envie d'opter pour une sorte d'usine a gaz qui m'obligerait a avoir une page d'envoi de mail par fonction. De plus, le fait d'afficher la page côté client me permet de vérifier son contenu pendant le débogage. Je vois tout de suite si une case n'est pas a sa place.

    Il est vrai que c'est un choix envisageable mais pour le moment, j'essaye de faire fonctionner ma solution.

    Bien à toi

    Laurent

  13. #13
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: Je suis d'accord...
    Citation Envoyé par Laurent Jordi
    De plus, le fait d'afficher la page côté client me permet de vérifier son contenu pendant le débogage. Je vois tout de suite si une case n'est pas a sa place.
    Choisir une solution technique sur des contraintes de debugage, c'est vraiment pas un critère...

    Sinon, pour ta partie de maintenance, tu peux conserver ton service d'envoi de mail, et l'appeller à partir de ton serveur.
    De toute façon, la complexité est dans ton cas reportée sur la page web qui est obligée de fabriquer les mails.

    De plus, ça permet à n'importe qui de faire n'importe quoi, la solution qui consiste à faire quelque chose sur le client n'a jamais de garanties que ce qui se passera est bien ce qui est sensé se passer...

    Enfin, a toi de voir

  14. #14
    CUCARACHA
    Invité(e)
    Par défaut Certes
    Si tu es capable de me dire comment faire pour poster un formulaire chargé côté serveur vers une page qui effectue le traitement côté serveur, je suis preneur.

    Concernant le contenu des mails, je te rassure, aucun traitement n'est effectué côté client. Il s'agit juste d'un transfert d'information.

    Étant donné qu'il s'agit de clients identifiés, il n'y a pas trop de risque de modification, et même si c'était le cas, seules les valeurs sur le serveur font foi.

    Il ne n'agit que de messages informatifs. Ils sont vérifiés par les commerciaux de toutes les façons.

    Dans le cas d'un système grand public j'aurais pu réagir différemment. Encore que seul une personne mal intentionnée et donc inconnue pourrait faire ce genre de chose.

    Je crois que dans ce cas, il n'est pas nécessaire de s'affoler mais je suis impatient de connaître ta solution car il y a de nombreux endroits où je pourrais l'utiliser je pense notamment au transfert de toutes les variables d'application et de session entre les pages ASP et ASPX.

    @+

    Laurent

  15. #15
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: Certes
    Citation Envoyé par Laurent Jordi
    Je crois que dans ce cas, il n'est pas nécessaire de s'affoler mais je suis impatient de connaître ta solution car il y a de nombreux endroits où je pourrais l'utiliser je pense notamment au transfert de toutes les variables d'application et de session entre les pages ASP et ASPX.

    Je sais le faire en J2EE, donc je suppose que c'est tout aussi faisable en ASP. Mais j'avoue n'avoir aucune idée sur comment le faire en ASP.

    Je te conseille de poser ta question dans le forum adapté (ASP).

    Bonne chance !!

Discussions similaires

  1. document.all
    Par raph707 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/05/2006, 12h37
  2. Pb avec IE document.all
    Par cryborg dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/05/2006, 16h35
  3. document.all
    Par sekaijin dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/03/2006, 13h28
  4. [INFOS] Recherche de documentations
    Par greengiant dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/10/2002, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo