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

IGN API Géoportail Discussion :

Erreur JavaScript sous Chrome, Safari et IE8


Sujet :

IGN API Géoportail

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut Erreur JavaScript sous Chrome, Safari et IE8
    Bonjour,

    Je suis en train de développer un service d'itinéraires sous IGN et Google Maps, IGN fonctionne parfaitement sous Firefox, IE6, IE7 et Opéra mais malheureusement sous Chrome, Safari et IE8, j'obtiens une erreur JavaScript que je n'arrive pas à résoudre.

    Cette erreur est celle-ci :
    Uncaught TypeError: undefined is not a function

    Le code en question est celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var routeControl = new OpenLayers.Control();
    OpenLayers.Util.extend(routeControl, {
    draw: function() {
    this.point = new OpenLayers.Handler.Point(routeControl, { 'done': this.drawRoute });
                },//...
    });
    L'erreur se situe au niveau de "new OpenLayers.Handler.Point"

    Vous pouvez visualiser le code à cette adresse :
    http://www.quechua-club.com/testGGMaps.aspx

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    C'est du pur OpenLayers, pas directement l'API Géoportail ...
    Habituellement, c'est la méthode initialize qui fait le boulot.

    Je préconise la définition d'une classe pour faire cela :

    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
    MyRouteControl= new OpenLayers.Class( OpenLayers.Control, {
        initialize: function(handler,options) {
           ...
            this.handlerOptions = OpenLayers.Util.extend(
                {/* options utiles */}, this.handlerOptions
            );
           this.handler= new handler(this, this.callbacks, this.handlerOptions);
        },
       draw() {
         this.point= ...
       }
    });
    
    var drawRoute= function() {};
    
    var routeControl= new MyRouteControl(OpenLayers.Handler.Point,{
        handlerOptions:{
          'done': drawRoute
        }
      });

  3. #3
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Merci de ta réponse,

    J'ai essayé mais malheureusement ça ne fonctionnait pas.

    J'ai essayé une autre méthode, la voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var routeControl = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, {
    callbacks : {
    "done": function(point) {...}
    }});
    Et là j'obtiens la même erreur mais dans le fichier GeoPortal.js ligne 97

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par hsii04 Voir le message
    Merci de ta réponse,

    J'ai essayé mais malheureusement ça ne fonctionnait pas.

    J'ai essayé une autre méthode, la voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var routeControl = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, {
    callbacks : {
    "done": function(point) {...}
    }});
    Et là j'obtiens la même erreur mais dans le fichier GeoPortal.js ligne 97
    Qu'est-ce qui ne fonctionne pas avec la première méthode ?

    J'arrive pas à utiliser l'exemple en ligne que tu fournis ...

  5. #5
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    J'ai essayé avec la class comme ceci :
    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
    var RouteControl = new OpenLayers.Class(OpenLayers.Control, {
        initialize: function(handler, options) {
            this.handlerOptions = OpenLayers.Util.extend(options, this.handlerOptions);
            this.handler = new handler(this, this.callbacks, this.handlerOptions);
        },
        draw: function() { this.point = this.handler; }
    });
    
    
    var me = this;
            var routeControl= new RouteControl(OpenLayers.Handler.Point, {
                handlerOptions: {
                    'done': function(point) { me.createWayPoint(point); }
                }
            });
    Mais malheureusement j'ai une erreur au niveau de :
    this.handler = new handler(this, this.callbacks, this.handlerOptions);

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par hsii04 Voir le message
    J'ai essayé avec la class comme ceci :
    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
    var RouteControl = new OpenLayers.Class(OpenLayers.Control, {
        initialize: function(handler, options) {
            this.handlerOptions = OpenLayers.Util.extend(options, this.handlerOptions);
            this.handler = new handler(this, this.callbacks, this.handlerOptions);
        },
        draw: function() { this.point = this.handler; }
    });
    
    
    var me = this;
            var routeControl= new RouteControl(OpenLayers.Handler.Point, {
                handlerOptions: {
                    'done': function(point) { me.createWayPoint(point); }
                }
            });
    Mais malheureusement j'ai une erreur au niveau de :
    this.handler = new handler(this, this.callbacks, this.handlerOptions);
    Ok, j'ai été un peu vite dans mon code précédent : il faut enlever le new devant OpenLayers.Class, sinon le this n'est pas celui que l'on croit.

    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
    MyRouteControl= OpenLayers.Class( OpenLayers.Control, {
        initialize: function(handler,options) {
           ...
            this.handlerOptions = OpenLayers.Util.extend(
                {/* options utiles */}, this.handlerOptions
            );
           this.handler= new handler(this, this.callbacks, this.handlerOptions);
        },
       draw() {
         this.point= ...
       }
    });
    
    var drawRoute= function() {};
    
    var routeControl= new MyRouteControl(OpenLayers.Handler.Point,{
        handlerOptions:{
          'done': drawRoute
        }
      });
    Peux-tu retester ?

  7. #7
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Ca ne fonctionne toujours pas.

    l'erreur javascript se situe à ce niveau :
    this.handler = new handler(this, this.callbacks, this.handlerOptions);

    J'ai essayé également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var routeControl = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, { callbacks : { "done": function(point) {
                me.createWayPoint(point);
            }}});
    Mais toujours cette même erreur

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par hsii04 Voir le message
    Ca ne fonctionne toujours pas.

    l'erreur javascript se situe à ce niveau :
    this.handler = new handler(this, this.callbacks, this.handlerOptions);
    Justement, mon code s'appuyait sur la classe OpenLayers.Control.DrawFeature ...

    As-tu bien remplacé les ... de la méthode initialize par :

    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
            // concatenate events specific to vector with those from the base
            this.EVENT_TYPES =
                OpenLayers.Control.DrawFeature.prototype.EVENT_TYPES.concat(
                OpenLayers.Control.prototype.EVENT_TYPES
            );
    
            OpenLayers.Control.prototype.initialize.apply(this, [options]);
            this.callbacks = OpenLayers.Util.extend(
                {
                    done: this.drawFeature,
                    modify: function(vertex, feature) {
                        this.layer.events.triggerEvent(
                            "sketchmodified", {vertex: vertex, feature: feature}
                        );
                    },
                    create: function(vertex, feature) {
                        this.layer.events.triggerEvent(
                            "sketchstarted", {vertex: vertex, feature: feature}
                        );
                    }
                },
                this.callbacks
            );
            this.layer = layer;
            var sketchStyle = this.layer.styleMap && this.layer.styleMap.styles.temporary;
            if(sketchStyle) {
                this.handlerOptions = this.handlerOptions || {};
                this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(
                    this.handlerOptions.layerOptions,
                    {styleMap: new OpenLayers.StyleMap({"default": sketchStyle})}
                );
            }
    ou à minima :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            OpenLayers.Control.prototype.initialize.apply(this, [options]);
    sinon, le this de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            this.handler = new handler(this, this.callbacks, this.handlerOptions);
    risque de ne pas être défini.

    Citation Envoyé par hsii04 Voir le message
    J'ai essayé également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var routeControl = new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, { callbacks : { "done": function(point) {
                me.createWayPoint(point);
            }}});
    Mais toujours cette même erreur
    Dans ce cas, 'me', c'est windows ?
    'layer' est bien défini ?

    Pourrais-tu juste faire une page avec le code (sans tout le reste autour ...) ?

  9. #9
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Toujours la même erreur

    Voici une page où tu pourras tester :
    http://www.quechua-club.com/testMaps.html
    Le Javascript se trouve ici :
    http://www.quechua-club.com/JS/ign/ign.maps.js

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par hsii04 Voir le message
    Toujours la même erreur

    Voici une page où tu pourras tester :
    http://www.quechua-club.com/testMaps.html
    Le Javascript se trouve ici :
    http://www.quechua-club.com/JS/ign/ign.maps.js
    Ok, merci (je zieute dès mon retour sur le sol national)

  11. #11
    Membre habitué
    Homme Profil pro
    Ingénieur Cartographe
    Inscrit en
    Juin 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Cartographe
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 84
    Points : 161
    Points
    161
    Par défaut Erreur OpenLayers
    Bonjour,

    J'ai moi aussi des erreurs semblables depuis quelques temps, y compris avec les exemple du Geoportail qui utilisent l'API en mode extended...
    (Géo-localisation, Geoportail...).

    IE8 m'indique une erreur ligne 111 dans GeoportailExtended.js. Du coup OpenLayers n'est pas chargé...

    Par contre la covisualisation du Geoportail continue à marcher (http://www.geoportail.fr/proxy-visu2D/geocatalogue)...

    Si cela peut faire avancer le schimililimililimi...blik.

    @+

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur Cartographe
    Inscrit en
    Juin 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Cartographe
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2009
    Messages : 84
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Viglino Voir le message
    y compris avec les exemple du Geoportail qui utilisent l'API en mode extended... (Géo-localisation, Geoportail...).
    Au temps pour moi... j'avais activé l'affichage de compatibilité. Par contre pour mon site, pas moyen de le désactiver (pas de bouton)...
    Il marchait en local mais pas en intranet... mais il y avait une option cachée : menu [Outils->Paramètre d'affichage de compatibilité] désactivez l'option afficher les sites intranet en affichage de compatibilité...

    Cela n'arrange pas le problème d'hsii04, désolé...
    @hsii04 : il semble que lors de la déclaration de styleMap, OpenLayers ne soit pas encore défini... As-tu essayé de reporter l'initialisation de styleMap dans la fonction initialize ?

    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
    var styleMap;
    
    function MapIGN(mapID) {
    
        ...
    
        initialize: function() {
            styleMap = new OpenLayers.StyleMap({
                    fillOpacity: 0.9,
                   pointRadius: 10
           });
           styleMap.addUniqueValueRules('default', 'type', lookup);
    
       ...
    Il y a toujours un message d'erreur mais la carte s'affiche...

    @+

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par Viglino Voir le message
    Il y a toujours un message d'erreur mais la carte s'affiche...
    Juste pour information, cette discussion contient peut-être des éléments intéressant ...

  14. #14
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    il semble que lors de la déclaration de styleMap, OpenLayers ne soit pas encore défini... As-tu essayé de reporter l'initialisation de styleMap dans la fonction initialize ?
    J'ai essayé mais rien n'y fait.

    Voici le détail de l'erreur :

    Détails de l’erreur de la page Web

    Agent utilisateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
    Horodateur : Mon, 28 Jun 2010 12:57:22 UTC


    Message*: Object expected
    Ligne*: 111
    Caractère*: 237727
    Code*: 0
    URI*: http://api.ign.fr/geoportail/api/js/1.0/Geoportal.js

  15. #15
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par hsii04 Voir le message
    J'ai essayé mais rien n'y fait.

    Voici le détail de l'erreur :

    Détails de l’erreur de la page Web

    Agent utilisateur : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
    Horodateur : Mon, 28 Jun 2010 12:57:22 UTC


    Message*: Object expected
    Ligne*: 111
    Caractère*: 237727
    Code*: 0
    URI*: http://api.ign.fr/geoportail/api/js/1.0/Geoportal.js
    L'erreur tombe là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    this.handlerOptions=this.handlerOptions||{};
    __________________^
    Je regarderai ton code ...

  16. #16
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 33
    Points : 16
    Points
    16
    Par défaut
    Pour info, cette erreur JS, n'apparaît pas une fois sur 100 sur Chrome, c'est à dire que une fois sur 100 mon appli fonctionne, c'est très aléatoire.

  17. #17
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par hsii04 Voir le message
    Voici une page où tu pourras tester :
    http://www.quechua-club.com/testMaps.html
    Petite question sur ta page de tests :

    [1] tu charges l'API en mode standard avec l'inclusion dans ta page du Geoportal.js - en mode standard, OpenLayers.Handler.Point n'existe pas ...

    [2] tu charges l'API en mode étendu où OpenLayers.Handler.Point existe !

    [1]=> lors du chargement de l'API, l'évènement onload sera appelé, si [2] n'est pas chargé, alors l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.handler = new handler(this, this.callbacks, this.handlerOptions);
    va échouer (handler est indéfini ...)

    Pourrais-tu :

    * modifier v=1.0 en v=1.0-e ;
    * modifier includeEngine=true en includeEngine=false.

    et re-tester ?

Discussions similaires

  1. [Google Maps] gmap Erreur Javascript sous internet explorer
    Par stomerfull dans le forum APIs Google
    Réponses: 2
    Dernier message: 19/09/2012, 20h14
  2. Erreur javascript sous IE rend le site inutilisable
    Par finalfx dans le forum jQuery
    Réponses: 2
    Dernier message: 10/03/2011, 23h51
  3. Comportement étrange fieldset sous Chrome/Safari
    Par eddie5150 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/08/2010, 12h45
  4. [POO] Erreur javascript sous Explorer
    Par s-c-a-r-a dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/11/2008, 14h09
  5. Erreur javascript seulement sous IE
    Par deudtens dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/06/2006, 13h48

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