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 :

APIGeoportail : erreur JavaScript avec ActiveX WebBrowser Microsoft


Sujet :

IGN API Géoportail

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut APIGeoportail : erreur JavaScript avec ActiveX WebBrowser Microsoft
    Bonjour,

    J'utilise l'API IGN pour un client (organisme public) depuis maintenant plus d'un an, et j'ai plusieurs difficultés décrites ci-dessous.

    Ces difficultés sont, au moins en partie, liées à l'utilisation de l'activeX WebBrowser de Microsoft, qui est nécessaire car le développement est réalisé sous Powerbuilder (Sybase/SAP). C'est dans cet ActiveX que la carte IGN est affichée, par l'appel d'une URL sur le serveur IIS qui héberge la page HTML d'appel à l'API IGN. Cette page HTML est créée dynamiquement par l'application en fonction des données saisies par l'utilisateur, car elle doit contenir les coordonnées du point sur lequel sera centrée la carte affichée, point qui varie à chaque fois. Par ailleurs, cela permet de récupérer dans l'application les coordonnées d'un point cliqué sur la carte par l'utilisateur. Pour info complémentaire, tout cela est ensuite déployé sous forme de site WEB via APPEON. Cette solution peut paraitre compliquée, mais c'est ce qui nous a été conseillé par le consultant SAP/Powerbuilder spécialisé sur ce genre de questions.

    Le premier problème est le suivant : l'API IGN affiche régulièrement, mais pas systématiquement, une erreur JavaScript (erreur 0 ligne 0), avec les détails suivants :
    - cette erreur se produit à partir du 2è affichage de la carte (pas d'erreur sur le 1er affichage), et ce uniquement lorsque la carte est centrée sur le nom d'une commune (et ce quel que soit ce nom : le même que lors de l'affichage précédent ou un autre) : il n'y a jamais d'erreur si la carte est centrée sur une longitude/latitude. Mais il est impossible de toujours centrer la carte sur des coordonnées, donc ...
    - il faut quitter l'application et la redémarrer pour pouvoir ré-afficher une carte centrée sur le nom d'une commune, mais à nouveau un seul affichage sans erreur est possible
    - cette erreur est certainement liée à l'ActiveX car l'appel de l'URL correspondant au même fichier HTML en direct dans un browser (IE ou Firefox) ne génère pas cette erreur
    - pour corriger ca :
    * gestion de la non-persistance de l'activeX et du cache entre 2 affichages : la 'fenetre' qui le contient est fermée entre les 2 affichages, avec une instruction 'destroy' explicite de cet ActiveX lors de cette fermeture, et le ".navigate" de l'activeX passe un paramètre spécifiant de ne pas utiliser le cache de IE
    * cet activeX fonctionnant par défaut en mode 'émulation IE7', je l'ai mis en mode 'EDGE' (ajout d'une ligne '<meta http-equiv="X-UA-Compatible" content="IE=EDGE"/>' dans le fichier HTML qui appelle l'API IGN). Ca marche, mais uniquement si la version d'IE installée sur le poste est la 11 : avec IE 8 ou 9 ou 10, l'erreur Javascript subsiste (vérifié en mettant 8 ou 9 ou 10 ou 11 à la place de EDGE dans l'instruction ci-dessus).
    * pour supprimer cette erreur Javascript sous IE8/9/10, j'utilise le WebService IGN pour récupérer les coordonnées (lon/lat) de la commune à partir de son nom, puisque qu'avec ces coordonnées l'erreur ne se produit pas. Pour appeler ce WebService j'utilise WINHTTP et un GET avec le bon Referer en Header et l'URL suivante (ex avec Paris) : http://wxs.ign.fr/<cle>/ols/apis/completion?type=StreetAddress,PositionOfInterest&text=Paris&terr=75000, ce qui me renvoit (renvoyait ...) la longitude et la latitude en "x":... et "y":...

    Le 2è problème est que depuis 1 jour ou 2, ce WebService IGN me renvoit systématiquement soit une réponse totalement vide, soit une erreur 403, soit une erreur "wrong referer". Or :
    - cela marchait sans trop de problèmes jusqu'à il y a quelques jours : j'avais bien de temps en temps ou sur certains postes des erreurs assez incompréhensibles, mais je ne m'en préoccupais pas trop dans la mesure où elles étaient peu fréquentes, peu reproductibles, et difficilement compréhensibles (ex : retour du WebService totalement vide, que ce soit au niveau du status ou de la réponse)
    - le code n'a pas été modifié
    - le couple CleAPI/Referer doit être correct puiqu'il n'a pas été modifié et que c'est de plus la même clé et le même serveur/URL/Referer qui sont utilisés juste après dans le code pour afficher la carte avec succès (au détail près de l'éventuelle erreur JavaScript ci-dessus)
    - je n'ai pas vu d'annonce de dysfonctionnement ces jours-ci sur le forum IGN

    Enfin, j'obtiens, mais sur un seul poste, une erreur -9 sur la création de la requete Winhttp (syntaxe : "objxmlhttp.ConnectToNewObject("WinHttp.WinHttpRequest.5.1")") : il me semble que cela signale un pb d'installation de WinHTTP, auquel je n'ai pas trouvé de solution (ex : un REGSVR32 de la dll renvoit une erreur, mais il la renvoit aussi sur les postes sur lesquels WINHTTP fonctionne), mais ce problème est secondaire car rencontré pour le moment sur un seul poste client

    En résumé, mes questions sont donc, par ordre d'importance décroissante :
    - pourquoi ce WebService ne fonctionne-t-il plus de chez moi ?
    - comment régler ou contourner complètement ce genre d'erreur JavaScript avec cet activeX, puisque la correction consistant à passer l'activeX en mode 'edge' ne permet apparemment de le faire que sous IE 11 et pas sous IE 8, 9 et 10 ?
    - comment régler les problèmes d'installation de WinHTTP ?

    Merci pour toute aide, je tiens bien évidemment le code à disposition si nécessaire mais je ne voulais pas surcharger ce post initial.

  2. #2
    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,

    Pour commencer, une question toute simple : avez-vous testé votre application sous IE8, IE9 ou IE10 en conditions réelles (et pas en émulation) ? Ce serait le seul moyen de vérifier que l'application a effectivement des problèmes sur ces versions, l'émulation n'ayant pas toujours le même comportement qu'un poste réel.

    Autre chose : la balise <meta http-equiv="X-UA-Compatible" content="IE=edge"/> ne sert pas à émuler une version de IE, mais à forcer son mode de compatibilité. Vous pouvez très bien garder cette balise et utiliser le site sur IE9 ou IE10, elle permettra de forcer le mode de compatibilité pour éviter les mauvaises surprises due à la régression de version. De fait, il est généralement conseillé de laisser la valeur "edge" à cette balise, puisque cela n'a pas beaucoup d'intérêt de forcer un mode de compatibilité ancien. Si vous voulez réellement émuler une version antérieure de IE, le mieux est de passer par les outils de développement du navigateur (F12), vous trouverez alors un module d'émulation qui vous permettra de passer en IE8, IE9, IE10 ou Edge. En émulant de cette manière tout en gardant votre balise meta sur "edge", vous constaterez peut-être que votre page fonctionne sans erreur même sur ces versions anciennes, auquel cas c'est gagné.

    Dernière chose : pour améliorer encore le mode de compatibilité, on aosscie généralement dans cette balise la possibilité d'utiliser le moteur de rendu de Chrome :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    Développeur Web - Agglo La Rochelle
    Anciennement pôle technique Géoportail - IGN
    Twitter : @dje_renard

  3. #3
    Membre averti Avatar de lowzonenose
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 196
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par PHYLUM Voir le message
    Le premier problème est le suivant :
    (...) cette erreur est certainement liée à l'ActiveX car l'appel de l'URL correspondant au même fichier HTML en direct dans un browser (IE ou Firefox) ne génère pas cette erreur (...)
    Hors API Geoportail...

    Citation Envoyé par PHYLUM Voir le message
    (...) Pour appeler ce WebService j'utilise WINHTTP et un GET avec le bon Referer en Header et l'URL suivante (ex avec Paris) : http://wxs.ign.fr/<cle>/ols/apis/completion?type=StreetAddress,PositionOfInterest&text=Paris&terr=75000, ce qui me renvoit (renvoyait ...) la longitude et la latitude en "x":... et "y":...
    cf. ci-dessous

    Citation Envoyé par PHYLUM Voir le message
    (...) ce WebService IGN me renvoit systématiquement soit une réponse totalement vide, soit une erreur 403, soit une erreur "wrong referer".
    Tester dans un navigateur ou en mode console (ex. curl) si le service renvoie bien une réponse.
    Sur un navigateur, tu peux utiliser Poster sous FireFox.
    Si le service ne renvoie pas de réponse correct, envoie nous ta clef...

    Citation Envoyé par PHYLUM Voir le message
    (...) une erreur -9 sur la création de la requete Winhttp (syntaxe : "objxmlhttp.ConnectToNewObject("WinHttp.WinHttpRequest.5.1")") :
    il me semble que cela signale un pb d'installation de WinHTTP, auquel je n'ai pas trouvé de solution (...)
    hors API Geoportail...

    Citation Envoyé par PHYLUM Voir le message
    Merci pour toute aide, je tiens bien évidemment le code à disposition si nécessaire mais je ne voulais pas surcharger ce post initial.
    Difficile de t'aider sur du dev sous Microsoft Windows HTTP Services (WinHTTP) car ceci ne concerne pas l'API JS Geoportail.

  4. #4
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses, et OK pour les réponses "Hors géoportail"

    Je viens de me rendre compte (test que je n'avais donc pas fait auparavant, contrairement à ce que croyais) que quand je teste en direct sous IE8 (donc avec l'URL qui appelle sur le serveur IIS de mon client la page HTML contenant l'appel au géoportail), après le 1er affichage de la carte :

    - si je ne vide pas le cache/historique (manuellement ou en cochant "... en quittant le navigateur"), tous les ré-affichages de la carte l'affichent centrée sur Paris (pourquoi Paris ?) au lieu du point demandé. Cela correspond au problème rencontré avec l'ActiveX, au détail près qu'avec l'ActiveX j'ai en plus une erreur Javascript que je n'ai pas avec IE8

    - si je vide le cache, les réaffichages de la carte sont bien contrés sur le point demandé.

    Avec IE11, les réaffichages sont toujours OK, quelquesoit le paramétrage du cache.

    Cela me conduit à penser :

    1- qu'il y a une erreur dans le code de ma page HTML (cf ci-dessous) car sinon je ne comprends pas pourquoi le géoportail refuserait d'afficher 2 fois de suite la même carte centrée sur le même point ?

    2- et que le flag "navNoReadFromCache" du ".navigate" de l'activeX ne marche pas : effectivement, après recherche, j'ai trouvé qu'il serait "Not implemented", cf https://msdn.microsoft.com/fr-fr/dd565688. Que puis-je faire ?

    Par ailleurs je vais essayer le Webservice sous Poster.

    A nouveau merci ...

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<title>IGN</title>
    	<meta http-equiv="X-UA-Compatible" content="IE=EDGE"/>
    	<meta id="SybLatt" name="SybLatt" content=""/>
    	<meta id="SybLong" name="SybLong" content=""/>
    	<link rel="shortcut icon" type="image/x-icon" href="img/favicon.ico"/>
    	<style type="text/css">
    		div#viewerDiv {width:800px; height:600px; background-color:white; background-position:center center; background-repeat:no-repeat;
    			background-image:url(http://api.ign.fr/geoportail/api/js/latest/theme/geoportal/img/loading.gif);
    		}
    	</style>
    	<script type="text/javascript" src="http://api.ign.fr/geoportail/api/js/latest/Geoportal.js"></script>
    	<script type="text/javascript">
    		var iv= " + string(now()) + ";
    		var markers= new OpenLayers.Layer.Markers("Repères");// créer une couche de markers
    		window.onload= function() {
    			iv= Geoportal.load(
    				'viewerDiv', 
    				['8pfrxq3qu05jvui3e7q4a7kg'], 
    				{place:"Mouacourt"}, 
    				16, //zoom level 
    				{//LoaderOptions  //  ajouter 'overlays:{},' pour ne pas affiche la 'puce' de centrage 
    					layers:['ORTHOIMAGERY.ORTHOPHOTOS','GEOGRAPHICALGRIDSYSTEMS.MAPS'], // charger la couche photos pour qu'elle apparaisse dans le gestionnaire de couches
    					layersOptions:{'ORTHOIMAGERY.ORTHOPHOTOS':{visibility:false, opacity:0.7}}, // couche photos invisible pour accélérer le chargement
    					language:'fr', 
    					viewerClass:'Geoportal.Viewer.Default', // utilisation de l'interface 'complete' 
    					onView: function() { // gestion du clic de souris 
    						OpenLayers.Control.Click= OpenLayers.Class(OpenLayers.Control, {
    							defaultHandlerOptions:{'single': true, 'double': false, 'pixelTolerance': 0, 'stopSingle': false, 'stopDouble': false},
    							initialize: function(options) {// Constructor 
    								OpenLayers.Control.prototype.initialize.apply(this,arguments);
    								this.handlerOptions= OpenLayers.Util.extend({},this.defaultHandlerOptions);
    								this.handler= new OpenLayers.Handler.Click(this, {'click': this.trigger}, this.handlerOptions);
    							}, // fin de initialize
    							trigger: function(e) {
    								var lonlat= this.map.getLonLatFromViewPortPx(e.xy).transform(this.map.getProjection(), OpenLayers.Projection.CRS84);
    								document.getElementById("SybLatt").setAttribute("content",lonlat.lat.toString() );
    								document.getElementById("SybLong").setAttribute("content",lonlat.lon.toString() );
    								// ajout d'un marker au point cliqué
    								markers.clearMarkers(); // effacer le marker précédent (quand plusieurs clics)
    								this.map.addLayer(markers);// attacher la couche de markers à la carte
    								var size= new OpenLayers.Size(25,25);
    								var offset= new OpenLayers.Pixel(-5, -20);// -5, -20 pour icone "http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png". Par défaut : Pixel(-(size.w/2), -(size.h/2))
    								var icon = new OpenLayers.Icon('http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png',size,offset);//créer l'icône : lien HTTP plutot que PATH local car pas de pb de déploiement client) 
    								var ll= new OpenLayers.LonLat(lonlat.lon, lonlat.lat);
    								ll.transform(OpenLayers.Projection.CRS84, this.map.getProjection());
    								markers.addMarker(new OpenLayers.Marker(ll,icon)); 
    								this.map.setCenter(ll); 
    							} // fin de triger 
    						});//fin de OpenLayers.Control.Click
    						var monClic= new OpenLayers.Control.Click({autoActivate:true});
    						this.getViewer().getMap().addControl(monClic);
    					} // fin de onView
    				} 
    			);
    		};
    	</script>
    </head>
    <body>
    	<div id="viewerDiv"></div>
    </body>
    </html>

  5. #5
    Membre averti Avatar de lowzonenose
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 196
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par PHYLUM Voir le message
    qu'il y a une erreur dans le code de ma page HTML (cf ci-dessous) (...)
    Le code me semble correct, et fonctionne sur les navigateurs.

    Citation Envoyé par PHYLUM Voir le message
    (...) je ne comprends pas pourquoi le géoportail refuserait d'afficher 2 fois de suite la même carte centrée sur le même point ?
    Qu'est ce que tu veux dire par afficher 2 fois de suite la même carte ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    "Afficher 2 fois de suite" : sous IE 8 (et à priori aussi 9 et 10 (non testé), mais pas 11 (testé)) :
    - menu "outils/options" : décocher "supprimer l'historique en quittant le navigateur" et cliquer sur "supprimer l'historique".
    - charger cette page : elle s'affiche centrée sur la bonne commune
    - faire F5 (ou quitter/redémarrer IE puis recharger cette page) : elle se réaffiche centrée sur Paris. F5 à nouveau ==> idem
    - pour qu'elle se réaffiche (la 1ère fois) centrée sur la bonne commune, faire menu "outils/options/supprimer l'historique" et F5.
    On peut ensuite boucler à l'infini entre les 2 dernières lignes ci-dessus.

    Remarques :
    - comme dit précédemment, "A chaque visite de cette page WEB" est coché mais ne fait (logiquement) rien
    - l'utilisateur doit pouvoir réafficher plusieurs fois la même carte, donc il me faut trouver une solution

    WebService : j'ai la même erreur 403 sous Firefox/Poster, cf copie d'écran ci-jointe qui inclut la clé


    Merci à nouveau !

    Nom : IGN.jpg
Affichages : 338
Taille : 184,6 Ko

  7. #7
    Membre averti Avatar de lowzonenose
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 196
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par PHYLUM Voir le message
    "Afficher 2 fois de suite" :
    faire F5 (ou quitter/redémarrer IE puis recharger cette page) : elle se réaffiche centrée sur Paris. F5 à nouveau ==> idem
    Je n'arrive pas à reproduire ce problème...
    La carte se recentre sur Paris comme si la géolocalisation ne s’exécutait plus, suite au rafraîchissement...
    À voir avec les options de IE sur la gestion du cache (?) ...

    Citation Envoyé par PHYLUM Voir le message
    WebService : j'ai la même erreur 403 sous Firefox/Poster, cf copie d'écran ci-jointe qui inclut la clé
    Hummm, je ne rencontre pas ce problème (cf. capture) mais je regarde de plus prêt...
    Nom : Sélection_143.png
Affichages : 323
Taille : 106,6 Ko

  8. #8
    Membre averti Avatar de lowzonenose
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 196
    Points : 407
    Points
    407
    Par défaut
    Désolé, je n'arrive pas à reproduire les problèmes de rafraîchissement sous IE.
    J'utilise IE11 sous Window7, et je suis passé par l'émulation pour simuler les différents IE... avec/sans suppression du cache...

    idem pour l'appel du service.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl  --referer http://sagirform.oncfs.net "http://wxs.ign.fr/8pfrxq3qu05jvui3e7q4a7kg/ols/apis/completion?type=StreetAddress,PositionOfInterest&text=Mouacourt"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"status":"OK","results":[{"country":"PositionOfInterest","x":6.626467,"y":48.678487,"city":"Mouacourt","zipcode":"54370","street":"","kind":"Commune","fulltext":"54370 Mouacourt","classification":5}]}

  9. #9
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Erreur JavaScript : effectivement cela fonctionne normalement avec une émulation IE8/9/10 sous IE11. Il faut un "vrai" IE8/9/10 pour avoir le problème, donc par exemple un ordinateur virtuel sous WindowsXP ou un Windows 7 sans Update Windows. Malheureusement certains de mes utilisateurs sont toujours sous XP, d'autres ont des politiques d'entreprise de mise à jour Windows qui les font rester sous IE9, etc.

    WebService : il fonctionne effectivement OK sous CURL chez moi. Sous Firefox/Poster, dans un premier temps il ne répondait OK qu'en enlevant le "&terr=54388" à la fin de l'URL (comme dans ton test) et uniquement avec "Mouacourt" (et uniquement avec ces maj/min). Après mise à jour de Firefox (version 40 et quelque ==> 41, déclenchée un peu par hasard), et sans réinstaller Poster, il s'est mis à répondre OK avec n'importe quelle commune/casse/CodeInsee : le WebService n'est donc pas en cause, mais comprenne qui pourra ...

    Donc le WebService fonctionne bien, et je sais maintenant comment en avoir la certitude, c'est une excellente chose.

    Par contre cela ne fonctionne toujours pas à partir de l'application, et ce quelque soit la version d'IE ou l'ordinateur d'où je teste. Le problème n'est pas qu'il ne répond pas (dans ce cas WINHTTP serait en cause, et ce serait donc hors forum) mais qu'il répond "403/wrongReferer" alors que (1) j'ai vérifié et révérifié que je passe dans l'application (donc via WINHTTP) exactement les mêmes URL et headers que sous CURL et Poster et (2) cela marchait jusqu'à il y a plusieurs jours et mon code n'a pas été modifié. Puisque j'obtiens une réponse, c'est que WINHTTP fonctionne, donc avez-vous une idée du pourquoi de cette réponse 403 du WebService ?

  10. #10
    Membre averti Avatar de lowzonenose
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 196
    Points : 407
    Points
    407
    Par défaut
    Citation Envoyé par PHYLUM Voir le message
    Par contre cela ne fonctionne toujours pas à partir de l'application, et ce quelque soit la version d'IE ou l'ordinateur d'où je teste. Le problème n'est pas qu'il ne répond pas (dans ce cas WINHTTP serait en cause, et ce serait donc hors forum) mais qu'il répond "403/wrongReferer" alors que (1) j'ai vérifié et révérifié que je passe dans l'application (donc via WINHTTP) exactement les mêmes URL et headers que sous CURL et Poster et (2) cela marchait jusqu'à il y a plusieurs jours et mon code n'a pas été modifié. Puisque j'obtiens une réponse, c'est que WINHTTP fonctionne, donc avez-vous une idée du pourquoi de cette réponse 403 du WebService ?
    ça ressemble peut être à un problème de Referer (?)
    Il serait peut être judicieux de mettre en place un WireShark afin de voir les entrées/sorties des requêtes de ton application.
    Avec cet outil, on aura peut être quelques informations intéressantes...

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 119
    Points : 1 764
    Points
    1 764
    Par défaut ça n'a peut-être rien à voir ...
    L'encodage de la page est en utf-8 ?

  12. #12
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Après pas mal de tests, une découverte : l'erreur JavaScript (suivie de la non-prise en compte du centrage de la carte sur un nom de commune) est provoquée par la présence dans le cache internet du fichier ols[1].json : après un 1er appel OK, le 2è appel :
    - génère le pb si ce fichier est présent dans le cache
    - affiche la carte centrée et sans erreur JS si j'efface à la main ce fichier du cache.

    Cela vous donne-t-il une piste (du genre paramètre complémentaire à spécifier dans l'appel au géoportail) ?

    J'essaye de mon côté de trouver comment effacer ce fichier du cache, mais :
    - "shell rundll32.exe inetcpl.cpl, ClearMyTracksByProcess 8" lancé depuis l'application fait planter IE - alors que cette même commande lancée à la main marche et règle le problème
    - l'utilisation des API Windows (tout ce qui tourne autour de DeleteURLCacheEntry) ne marche pas non plus depuis l'application

  13. #13
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Bonjour,

    l'envoi de la requête de gécocdage est géré par la classe javascript OpenLayers.Protcol.Script qui gère l'appel en JSONP au service de géocodage. Pour forcer la non réutilisation du cache vous pouvez essayer de rajouter un paramètre aléatoire à la requête. Pour cela, je vous invite à essayer le code suivant (non testé et probablement à affiner) qui surcharge la méthode createRequest de la classe en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    OpenLayers.Protocol.Script= OpenLayers.overload(OpenLayers.Protocol.Script, {
    
        createRequest : function(url, params, callback) {
            // rajoute un paramètre aléatoire à la requête
            url= url+"&nocache="+Math.random() ;
            OpenLayers.Protocol.Script.prototype.createRequest.apply(this,[url,params,callback]) ;
        }
    
    }) ;
    Ce code est à charger avant l'exécution de la fonction Geoportal.load().

  14. #14
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses.

    Le pb est résolu en partie et contourné pour le reste :
    - pour le WebService sous Winhttp : le problème venait très simplement (et bêtement) de la casse (min/maj) dans le referer - mais c'est le genre de truc sur lequel on passe et repasse 20 fois avant de le voir ...
    - pour le cache : puisque le WebService re-fonctionne, cela permet de contourner le problème de cache, lequel existe cependant toujours car je n'ai pas réussi à faire fonctionner la solution proposée par gcebelieu (je ne maitrise pas assez le javascript pour cela)les fonctions API d'effacage du cache

Discussions similaires

  1. erreurs javascript avec internet explorer
    Par cowboydeluxe dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/11/2009, 10h53
  2. [AC-2007] pb liste avec activeX WebBrowser
    Par polux dans le forum IHM
    Réponses: 2
    Dernier message: 15/09/2009, 09h39
  3. Erreur Javascript avec certaines versions de IE6
    Par ymerej dans le forum SharePoint
    Réponses: 5
    Dernier message: 24/11/2008, 16h36
  4. Réponses: 2
    Dernier message: 28/02/2008, 11h15
  5. Erreur javascript avec ajaxtaglib
    Par ikane dans le forum Struts 1
    Réponses: 2
    Dernier message: 22/11/2007, 15h39

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