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 :

Portée des fonctions JS


Sujet :

JavaScript

  1. #1
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 14
    Par défaut Portée des fonctions JS
    Bonjour,

    Désolé pour le titre mais je ne sais pas quoi mettre.

    J'explique mon problème, on me demande d'intégrer dans une de nos pages une applet venant d'un éditeur externe.
    Lorsque cette applet rencontre un problème elle tente d'appeler une méthode javascript nommée getError.
    Jusque là pas de problème j'ai défini cette méthode dans un de nos scripts et j'ai effectué les traitements nécessaires.

    Maintenant cela se corse un peu car dans cette page, j'inclu maintenant plusieurs fois cette applet. Pour mes tests, j'en fait volontairement bugger une.
    La fonction getError est bien appelée mais je n'arrive pas à déterminer quelle applet à provoquer cet appel.
    Les paramètres d'appel de cette fonction ne me permettent pas d'identifier quelle applet est initiatrice de cet appel.

    Bien entendu, il n'est pas possible de demander une évolution à l'éditeur pour qu'il me passe des paramètres en plus.

    Y aurait-il une solution pour définir au niveau de ma page plusieurs fois cette fonction avec un système de portée ou je ne sais quoi ? Ou peut être est-ce possible d'avoir une sorte de "call tree" ce qui me permettrai peut être de retrouver quelle applet à effectué cet appel? Ou peut être est-ce possible d'englober mon applet pour faire une sorte de catch sur cet appel de fonction et ainsi redirigé sur une fonction paramétrée ?

    Enfin voilà si quelqu'un à une idée, je lui en serai reconnaissant.
    Merci.

  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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    en lui passant un paramètre ?
    ou avec caller

    http://jsfiddle.net/uSUmT/5/
    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 !

  3. #3
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 14
    Par défaut
    Merci pour ta réponse.

    Passer un paramètre ce n'est pas possible, je n'ai pas la main sur la définition et l'appel de cette fonction. Je ne peux que l'implémenter.

    Pour le caller j'ai essayé et j'obtiens "null".

    D'autres pistes ?

  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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    Pour le caller j'ai essayé et j'obtiens "null".
    c'est que tu as mal essayé ...
    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 !

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Citation Envoyé par SpaceFrog
    c'est que tu as mal essayé ...
    pas forcément dans l'exemple ci dessous cela retournera également null si je ne m'abuse!


    tu peux essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function execFonction( fct, id){
      try{
        fct();
      }
      catch(e){
        alert( e.message +'\n' +id);
      }
    }
    execFonction( refFct, 'test');
    PS : je ne m'abuse pas, la fonction est appelée en directe et non par une autre fonction.

  6. #6
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Si c'est null, la fonction getError a été appelée dans le scope global.
    http://jsfiddle.net/uSUmT/6/

  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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    http://jsfiddle.net/uSUmT/7/

    il me retourne bien le caller même si le fonction est passée en paramètre ...
    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 !

  8. #8
    Membre averti
    Inscrit en
    Avril 2002
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 14
    Par défaut
    De ce que j'ai lu sur internet, on obtient null quand la fonction est appelée directement. Dans mon cas c'est le couple navigateur / JVM qui réalise cet appel. L'appel n'est pas effectué directement par une autre fonction JS.

    J'ai trouvé un exemple qui illustre le "null", mais bon vu que je peux me tromper ci-cessous mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function getError() {
    alert(getError.caller);
    }

  9. #9
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Préfère les ressources de MDN, plus précises

    Je ne pense pas que ça soit possible si tu n'as pas la main sur le code de l'applet.

Discussions similaires

  1. Appels JS - Portée des fonctions
    Par informer dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 06/12/2013, 23h59
  2. [Toutes versions] Portée des fonctions : comment créer une fonction commune à tous les classeurs ?
    Par akr54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2010, 11h29
  3. Portée des noms des arguments de fonctions : locale ou globale?
    Par amundsen dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/12/2008, 13h01
  4. Portée des variables et des fonctions
    Par Haze. dans le forum Général Python
    Réponses: 5
    Dernier message: 23/06/2007, 10h10

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