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 :

problème avec onView


Sujet :

IGN API Géoportail

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 880
    Points : 373
    Points
    373
    Par défaut problème avec onView
    Bonjour à tous
    Je vous expose un problème qui m'agace depuis vendredi.
    Je viens de programmer une nouvelle fonctionnalité pour un web, fonctionnalité qui utilise l'api geoportail.
    J'ai construit cette nouvelle page en prenant modèle sur une déjà existante dans mon web.
    La nouvelle page fonctionne très bien sur Chrome, FF et IE depuis mon ordinateur, mais la fonction appelée par "onView:initwnat" ne s'active pas depuis un Chrome ou FF sous Androïd.
    J'ai trouvé la parade en codant "onView:initwnat" en "onView:initwnat()" mais dans ce cas, l'utilisation du getviewer n'est plus reconnu dans initwnat !
    J'ai fabriqué une page de démo http://wnat.fr/geoportail_onview_bad_android.html qui fonctionne bien sous Chrome ordinateur (mais plus dans FF et IE !!!). La page http://wnat.fr/geoportail_onview_bad_all.html active initwnat dans tous les navigateurs, ordinateur ou androïd.
    Un coup d'oeil me serait d'un grand secours, une solution privilégiant l'appel initwnat avec la syntaxe "onView:initwnat()" aurait ma préférence mais si un petit malin m'indique d'où vient le "getviewer is not a fonction"
    Notez que toutes mes autres pages utilisant geoportail dans ce web (une vingtaine) utilisent la syntaxe "onView:iniwnat" et quelles fonctionnent très bien tant sous Windows que sous Androïd.
    Une idée ?

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 880
    Points : 373
    Points
    373
    Par défaut
    Cet incident est quasiment le même que celui que j'avais ouvert en décembre http://www.developpez.net/forums/d15...s-chrome-47-a/
    Seule évolution, c'est que l'ajout de parenthèses à onView:initwnat() permet d’accéder à la fonction d'init.
    Mon type de programmation est-il orthodoxe ou dois-je revoir qqu chose à tout cela ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 880
    Points : 373
    Points
    373
    Par défaut De plus en plus fort
    Salut à tous

    Je m'arrache les cheveux !

    La page http://wnat.fr/geoportail_onview_bad_android.html s'affiche correctement dans Chrome Windows et par miracle dans Chrome Android.
    Pareil avec Safari windows et Ipad.

    Ce matin, en refaisant un test avec IE, le geoportail ne s'affiche pas : PAR CONTRE, si le passe IE en mode développeur (F12), sans point d'arrêt, la page s'affiche systématiquement , si j'arrête le F12, geoportail ne s'affiche plus

    Même constat avec Firefox, mais avec une petite nuance, l'affichage en mode F12 ne garanti pas l'affichage systématique du geoportail, mais j'ai vu le résultat affiché une fois

    J'ai ajouté un alert("onview") dans initwnat. Quand IE et FF ne sont pas en mode F12, il n'est pas affiché !

    Une idée sera la bienvenue

  4. #4
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    Bonjour,

    Le problème a l'air complexe vu qu'il n'est reproductible que sous certaines configurations, et cela risque donc d'être compliqué de comprendre ce qu'il se passe.

    Première chose : la syntaxe "onView:iniwnat" est celle qu'il faut utiliser. C'est pour cela que toutes tes autres pages fonctionnent bien, et c'est aussi pour cela que si tu changes cette syntaxe cela te provoque une autre erreur par ailleurs. Le problème n'est pas là.

    Si je testes la page http://wnat.fr/geoportail_onview_bad_android.html de mon coté, voilà ce que j'obtiens sous Windows :
    - Chrome OK
    - IE11 OK
    - Firefox KO
    La présence ou non des outils de développement F12 ne change rien à cet état de fait (j'ai d'ailleurs du mal à comprendre comment la seule présence de ces outils peut modifier le comportement de ton coté).

    Tu dis que la page fonctionnait sous Firefox il y a deux jours, et aujourd'hui elle ne fonctionne plus. Quelque chose a-t-il changé entre temps dans le code ?

  5. #5
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    Sur ce point :

    Citation Envoyé par saxrub
    une solution privilégiant l'appel initwnat avec la syntaxe "onView:initwnat()" aurait ma préférence mais si un petit malin m'indique d'où vient le "getviewer is not a fonction"
    L'explication est la suivante :
    - la syntaxe onView: initwnat; implique que la fonction initwnat est exécutée lorsque l'évènement onView est déclenché par la carte (principe de callback) => cela se voit parce que cela implique un délai d'exécution de la fonction, le temps que la carte s'initialise
    - la syntaxe onView: initwnat(); implique que la fonction initwnat est exécutée immédiatement après l'exécution de l'instruction en cours => cela se voit parce que la fonction s'exécute instantanément

    Dans ce second cas de figure, si la carte n'est pas initialisée dans l'instant (ce qui est normal vu que cela prend un certain laps de temps), la fonction initwnat est exécutée alors que l'objet viewer n'est pas encore totalement instancié. Conséquence directe : l'instruction viewer.getViewer() ne peut être interprété comme une fonction valide.

    C'est pour cela qu'il faut privilégier le mécanisme de callback sur l'évènement onView par la syntaxe onView: initwnat.

    Le vrai fond du problème ici est le suivant : l'évènement onView semble ne pas se déclencher, ce qui fait que la fonction initwnat n'est jamais parcourue.

  6. #6
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    J'avoue avoir énormément de mal à comprendre.

    Si j'isole le morceau de code initialisant le viewer (la fonction Geoportal.load) et la fonction initwnat, que je les colle dans un exemple simple d'utilisation de l'API, l'évènement onView est bien déclenché.
    Le code de ces fonctions n'est a priori pas à remettre en cause. Il semblerait donc qu'il y ait dans le reste du code des éléments "parasites" qui empêchent le bon déclenchement de cette fonction sous certaines configurations. C'est tout de même très étonnant...

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 880
    Points : 373
    Points
    373
    Par défaut
    La page test est en fait le code html toiletté de ma page de production.
    Cette page de production fonctionne fonctionne sous FF, IE et safari, mais pas systématiquement sous Chrome windows et jamais sous Chrome Android !
    Le non affichage du message d'alerte qui est produit quand initwnat est activé est bien la preuve que de temps en temps, pour je ne sais quelle raison, initwnat n'est pas appelé.
    Note que mes autres pages de production, construites sur le même principe, fonctionnent (du moins fonctionnaient) sur tous les navigateurs windows, android et ipad !

  8. #8
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    J'ai fait quelques tests en reproduisant ton code en local, et je pense que le problème vient de la fonction updateViewerDimensions();

    En effet, quand je supprime l'appel à cette fonction updateViewerDimensions(Math.abs(my_LONG_NO-my_LONG_SE),Math.abs(my_LAT_NO-my_LAT_SE)); la carte s'initialise correctement, l'évènement onView est bien déclenché et la fonction initwnat est bien traversée.

    Peux-tu me confirmer que la suppression de l'appel à cette fonction corrige le problème aussi de ton coté ?

    Dans cette fonction, c'est apparemment le redimensionnement à la volée du viewerDiv qui pose problème. Si je comprends bien, cette fonction sert à adapter la hauteur de la carte à celle de la fenêtre ouverte. Ce genre de procédé relève du Webdesgin et a plus sa place dans du CSS que dans du Javascript.

    Ce que je te conseille : supprimer la fonction updateViewerDimensions() et son appel, et définir la hauteur de ton viewerDiv dans le CSS en utilisant la propriété calc pour prendre en compte l'en-tête :

    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    html, body {
      height: 100%;
    }
     
    #viewerDiv {
      height: calc(100% - 40px); // 40px correspond à la hauteur de l'en-tête
    }

    Fais-moi un retour quand tu peux pour savoir si j'ai visé juste

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2009
    Messages : 880
    Points : 373
    Points
    373
    Par défaut

    La piste était bonne et explique l'autre problème avec Chrome 47 car j'utilise depuis longtemps cette fonction de resize dans toutes les pages geoportail. Je vais changer mon fusil d'épaule et passer par du css.
    Merci pour ce coup d'oeil plus qu'efficace !

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 12h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 11h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 19h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

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