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 :

dynContext : this.popup.document a une valeur null


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut dynContext : this.popup.document a une valeur null
    Bonjour à tous.

    J'ai un problème avec dynContext (http://www.phpguru.org/static/dynContext.html). Le principe de ce script, pour ceux qui ne le connaisse pas, est de créer un menu contextuel personnaliser sur certains objets. A l'installation du script, je n'ai eut aucun problème avec Firefox, mais avec IE, sa coince :/ Il me fait une erreur en me disant : "this.popup.document a la valeur Null ou n'est pas un objet". Ayant un niveau plutôt "faible" en javascript, je doit dire que je ne vois pas trop bien comment pallier au problème...

    Après avoir farfouiller un peu partout dans le code, j'ai pu remarquer que l'erreur venait de là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc = this.popup.document.open('text/html');
    De ce que je sais, il me semble que les mots "popup" et "document" sont des mots clefs du langage JS (corrigez moi si je me trompe). Je ne vois donc pas très bien pourquoi IE n'arrive pas à interpréter cette intruction. "this" est défini (c'est un objet), this.popup est defini aussi (= true), mais this.popup.document ne l'est pas...

    voila, sinon l'instruction précédente est celle-ci :
    Et le code de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dynContext.prototype.createPopup = function ()
        {
            //if (!this.popup) { // Fix bug in recent (latest) IE6 (maybe XP SP2?)
            this.popup = this.windowObj ? this.windowObj.createPopup() : window.createPopup();
            //}
        }
    J'ai essayé en décommentant les 2 lignes //, mais ça ne fonctionne pas non plus.

    Comme je vous l'ai dit, mon niveau en JS est plutôt faible donc il est possible que je donne des informations inutiles, auquel cas veuillez m'excuser

    Voila, si quelqu'un a une idée pour résoudre mon problème... merci.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Personne pour m'aider ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Je ne trouve vraiment pas là, un coup de main serait franchement le bienvenu... Serait-il possible d'initialiser this.popup.document afin d'en faire un objet ? La je doit dire que je calle. Je pédale dans la semoule depuis le debut de la journée sans arrivé à rien et je n'ai pas le début du moindre indice de la raison pour laquelle sa ne marche pas... Au point ou j'en suis toute idée, suggestion, piste, farfelue ou non sera la bienvenue.

    S'il vous plait, aidez un pauvre développeur au bord de la déprime

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    est-ce que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dynContext.prototype.createPopup = function ()
        {
            if (!this.popup) { // Fix bug in recent (latest) IE6 (maybe XP SP2?)
            this.popup = this.windowObj ? this.windowObj.createPopup() : window.createPopup();
            }
        }
    est ta seule méthode ?

    Sinon tu peux essayer sans utiliser "prototype" (ll me manque des infos sur la déclaration de dynContext masi voici une manière de procéder ) :

    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
     
    /** Definiton de l objet dynContext **/
    dynContext = function()
    {
     //Déclaration des variables...par exemple :
     this.variable1 = 1; 
     this.variable2 =  2;
     
     //Declaration de la fonction :
        this.createPopup = function ()
        {
            //if (!this.popup) { // Fix bug in recent (latest) IE6 (maybe XP SP2?)
            this.popup = this.windowObj ? this.windowObj.createPopup() : window.createPopup();
            //}
        }
    }
     
    /** Creation de l objet **/
    var monObjet = new dynContext();
     
    /** Appel de la methode **/
    monObjet.createPopup();

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Malheureusement, ça ne semble pas marché non plus... Il me dit que "cet objet ne gère pas cette propriété ou cet méthode".

    Si sa peut aider je met les fichiers sources d'origine de dynContext pour msie (un autre fichier est nécessaire pour FireFox, mais celui là ne semble pas poser problème)

    Voila égalemment les différents appels au script :

    Dans ma page principale (admin.php) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script language="javascript" type="text/javascript">
      <!--
          dynContext_path = 'include/';
      // -->
      </script>
     
      <script language="Javascript" src="include/dynContext.js"></script>
    Et dans le code de l'objet php qui s'en sert :
    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
    <script type='text/javascript'>
     
            var id_dossier;
     
            /* Ensemble de fonction de définition des action */
            function modifier_dossier()
            {
                document.location = 'admin.php?mod=depot&act=modDossier&id='+id_dossier;
            }
     
            function supprimer_dossier()
            {
              var id_d = id_dossier;
              if(confirm('Etes-vous sur de vouloir supprimer définitivement ce dossier ainsi que son contenu ?')){
                document.location = 'admin.php?mod=depot&act=supp&id='+id_d;
              }
            }
     
            // Définit l'id du dossier sélectionné
            function set_id_dossier(id){
              id_dossier = id;
            }
     
            // Création du menu contextuel
            myMenu = new dynContext('myMenu', '/stylesDynContext/dynContext.xp.css', 180, 0);
            myMenu.setImagePath('/images/');
            myMenu.addItem(new dynContext_menuItem('Modifier', 'modifier_dossier'));
            myMenu.addItem(new dynContext_menuItem('supprimer', 'supprimer_dossier'));
     
          </script>
    Et enfin, l'appel au menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseover=\"set_id_dossier($id);\" oncontextmenu=\"myMenu.show(event); return false\"
    Voila, je pense que tout les éléments sont là...

    Merci d'avoir pris du temps pour mon problème.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    j'ai vu ton code, a priori il est bon. Visiblement c'est createPopup()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.popup = this.windowObj ? this.windowObj.createPopup() : window.createPopup();
    fait planter le navigateur.

    Juste pour un test : est-ce qu'un simple alert() passe ?
    Regarde voir si tu ne peux pas remplacer createPopup() par window.open()

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Après avoir placé mon alert, je peut dire que la fonction createPopup() s'effectue complètement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc = this.popup.document.open('text/html');
    est à priori la ligne qui plante (l'alert placé après ne s'effectue pas). Quant-à remplacer createPopup() par window.open, il m'ouvre bien une nouvelle fenêtre, mais bon, c'est pas trop ce que je veux et la suite du code plante.

    Voila la manip que j'ai essayer de faire :
    Peut être n'est-ce pas la bonne manière de procéder ?

  8. #8
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doc = this.popup.document.open('text/html');
    est à priori la ligne qui plante (l'alert placé après ne s'effectue pas).
    est-ce que le navigateur indique un message d'erreur (en bas à gauche sous IE un ? sur fond jaune apparaît) ?


    Quant-à remplacer createPopup() par window.open, il m'ouvre bien une nouvelle fenêtre, mais bon, c'est pas trop ce que je veux et la suite du code plante.
    il vrai que remplacer createPopup par window.open() n'est pas ce qu'il de mieux, surtout que le problème n'est pas à ce niveau visiblement.

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    createPopup() ou createElement('popup') est loin d'être cross browser ...

    quelle sont les contraintes qui t'empechent d'utiliser simplement un window.open ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    est-ce que le navigateur indique un message d'erreur (en bas à gauche sous IE un ? sur fond jaune apparaît) ?
    Oui, cela même

    quelle sont les contraintes qui t'empechent d'utiliser simplement un window.open ?
    Hé bien deux choses en fait. la première est qu'il s'agit d'un menu contextuel, donc ouvrir une nouvelle fenêtre me parait être un peu "barbare" comme méthode. Sans compter les contraintes de communication entre les fenêtre parent et enfant. La deuxième, est que ce code n'est pas de moi... Comme je l'indique sur mon premier poste, je l'ai récupéré sur phpGuru (où le menu fonctionne parfaitement bien sous IE, soit dit en passant). J'ai beau me triturer la tête dans tous les sens, je n'arrive pas à comprendre pour quelle raison il n'est pas content. A priori, sa ne peut pas venir d'une configuration serveur qui ne serait pas adapter, non ?

  11. #11
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    alors utilise plutot un div ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. document.getElementById retourne une valeur Null..
    Par jpe54 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/04/2013, 16h01
  2. [vb.net] tester une valeur nulle de maniere elegante
    Par graphicsxp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/08/2005, 15h36
  3. Réponses: 3
    Dernier message: 10/08/2005, 11h11
  4. Affcecter une valeur NULL dans une requete paramétrée
    Par thiouwz2 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 15h02
  5. Passer une valeur Null dans un argument de procédure
    Par preempalver dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/12/2003, 20h52

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