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 :

Problème createElement sous Netscape


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 103
    Points
    103
    Par défaut Problème createElement sous Netscape
    bonjour

    J'ai créé un diaporama en javascript qui fonctionne parfaitement sous IE et FF. Je pensais donc que ça roulerait aussi sous Netscape... Erreur

    Voici le code qui pose problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function buildDiap(){
    	//créer les div
    	document.write('<div id="thumbnail"><img id="tn" /></div>')
     
    	objTemp=document.createElement('div')
    	objTemp.style.color="#FFFFFF";
    	objTemp.style.position='absolute';
    	objTemp.style.left='0px';
    	objTemp.zIndex=100;
    	document.body.appendChild(objCadre);
    ...
    Voici l'erreur renvoyée par Netscape:"document.body has no properties"
    Cette fonction qui crée la structure du diaporama (div, img et liens) est déclenchée entre les balises <head> (avant le onLoad) de ma page.
    J'ai essayé d'accéder à l'objet body différement (getElementsByTagName ; document.body.insertBefore...) mais j'ai toujours la même erreur...

    Pourtant ce script fonctionne bien sous FF...

    quelqu'un aurait-il une petite idée du problème???
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    tu le lances à quel moment ce script ?
    faits tu un document.body.open() ?

  3. #3
    Membre régulier Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 103
    Points
    103
    Par défaut
    La fonction est appelée à l'intérieur des balises <head>...
    Le body n'est peut-être pas instancié à ce moment ?

    Je ne fais pas de "document.body.open()", que d'ailleurs je ne connais pas

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    essaye plutot alors de lancer la focntion dans la balise body:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="mafocntion()" >

  5. #5
    Membre régulier Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 103
    Points
    103
    Par défaut
    Je viens d'essayer le document.body.open(), et de lancer ma fonction dans le onLoad du body, mais sans succès, toujours la même erreur à la même ligne...
    Je ne comprends pas, surtout que juste avant de désigner "document.body" dans le code je fais un "document.write" ...

  6. #6
    Membre régulier Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 103
    Points
    103
    Par défaut
    Même en plaçant la fonction dans le onLoad du body, si je fais "alert(document.body)" dans celle-ci, il me renvoie "null"...

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByTahName('body')[0].appendChild(objCadre);

  8. #8
    Membre régulier Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 103
    Points
    103
    Par défaut
    Ca ne fonctionne pas... Tojours la même erreur

    Par contre, je viens de voir que dans les options de Netscape j'ai un onglet "enable ActiveX" décoché et grisé... Ca ne pourrait pas venir de là :
    Sinon, voici le contenu de mon fichier Javascript jusqu'à la ligne d'erreur:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    //initialisation des variables
    imgArray=new Array(2);
    var windowWidth;
    var windowHeight;
    var _img;
     
    //Déterminer la position du curseur
    if(document.getElementById){
    	var mouseX=0;
    	var mouseY=0;
    	if(navigator.appName.substring(0,3)=="Net"){
    		document.captureEvents(Event.MOUSEMOVE);
    	}
    	document.onmousemove = mousePos;
    }
    function mousePos(e){
    	mouseX = (navigator.appName.substring(0,3)=="Net") ? e.pageX : event.x+document.body.scrollLeft;
    	mouseY = (navigator.appName.substring(0,3)=="Net") ? e.pageY : event.y+document.body.scrollTop;
    }
     
    buildDiap();
     
    function buildDiap(){
    	//créer les div
    	document.write('<div id="thumbnail"><img id="tn" /></div>')
     
    	objTemp=document.createElement('div')
    	objTemp.style.color="#FFFFFF";
    	objTemp.style.position='absolute';
    	objTemp.style.left='0px';
    	objTemp.zIndex=100;
    	document.getElementsByTagName('body')[0].appendChild(objTemp);
    ...
    Sachant que la fonction buildDiap() est beaucoup plus longue...

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    ben normal c'est un souci d'instanciation
    tu as une ligne qui traine ...
    vire cette ligne et appelle la focntin comme je t'ai dit plus haut dans le onload du body ...

    telquel là tu essaye de lancer la fonction par l'appelk dans cette ligne sans que le body ne soit instancié ...

  10. #10
    Membre régulier Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 103
    Points
    103
    Par défaut
    Merci, mais en fait c'était bien ce que je veux faire.
    J'ai juste regroupé un gros morceau de code dans une fonction (buildDiap())...
    J'ai bien sûr enlevé cette ligne lorsque j'ai appelé la fonction dans le onLoad du body.... Je viens de refaire un essai au cas où, mais sans succès

    Toujours la même erreur... De plus, sur les autres navigateurs, le fait de faire un "document.write()" suffit (il me semble) à instancier l'élément body. C'est la raison pour laquelle ma première balise div est créée de cette façon... Car j'avais un problème similaire sous IE et FF sans mettre cette ligne.

    Enfin bref, toujours est-il qu'en mettant lançant la fonction depuis le onLoad du body, la concole javascript s'arrête toujours sur cette erreur...

  11. #11
    Membre régulier Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 103
    Points
    103
    Par défaut
    Je viens de me repencher sur le problème, et finalement j'ai trouvé une (la?) solution:
    Sous Netscape il faut créer la balise body avant de pouvoir le désigner dans le code (avant l'évènement onload) en faisant par exemple un "document.write("<body>")".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(navigator.appName.substring(0,3)=="Net"){
    	document.write("<body></body>");//évite bug sous Netscape
    }
    buildDiap();
     
    function buildDiap(){
    	//créer les div
    	document.write('<div id="thumbnail"><img id="tn" /></div>');
     
    	objTemp=document.createElement('div')
    Voilà,
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème police sous IE
    Par rellik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 28/08/2005, 20h12
  2. .htaccess problème création sous windows
    Par Leviathan_72 dans le forum Apache
    Réponses: 2
    Dernier message: 18/05/2005, 20h29
  3. Infobulle sous Netscape
    Par nicolb dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2005, 01h03
  4. Problème de sous-requete.
    Par Oberown dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2004, 16h44
  5. ContextMenu de l'explorer: Problème de sous menu
    Par Ingham dans le forum Composants VCL
    Réponses: 8
    Dernier message: 26/02/2004, 08h06

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