Googles Maps, valeurs retournées (communication de Javascript à  Objective-C)

RocouRocou Membre
octobre 2009 modifié dans API AppKit #1
Je n'arrive à  récupérer des données issus d'un script javascript. Enfin si, mais uniquement quand il s'agit du texte. ça doit être tout con mais je sèche.

Côté cocoa, j'ai ce code:
id result;<br />	result = [map callWebScriptMethod:@&quot;CaculDistance&quot; withArguments:nil];<br />	NSLog(@&quot;result: %@&quot;, result);<br />


Et côté script:

&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot;&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; map = new GMap2(document.getElementById(&quot;map_area&quot;));<br />&nbsp; &nbsp; &nbsp; &nbsp; map.setCenter(new GLatLng(44.833, -0.567), 10);<br />			<br />		function CaculDistance(scrObject)<br />		{	<br />		<br />			var directions;<br />			var mesure;<br />	<br />			directions = new GDirections(null,null);<br />			directions.load(&quot;from: 40600 sanguinet, FR to: 33000 bordeaux, FR&quot;);<br />			GEvent.addListener(directions,&quot;load&quot;, function() {<br /><br />				mesure = directions.getDistance().meters;<br /><br /><br />				}); <br />				<br />			return mesure;&nbsp; <br />		}<br />		<br />&nbsp; &nbsp; &lt;/script&gt;<br />


J'obtiens:
result: undefined

Si à  la place de return mesure;, je mets return "toto";, je récupère bien la chaine "toto"

La doc de callWebScriptMethod précise ceci:
Return Value<br />The return value of the method. Returns WebUndefined if an exception is thrown in the JavaScript environment or the method has no return value.

Or quand je teste mon script sous safari, il fonctionne très bien: en mettant alert(mesure) à  la place de return mesure, j'obtiens bien la valeur de mesure.

Réponses

  • Fallout88Fallout88 Membre
    21:44 modifié #2
    Bonjour,
    J'ai déjà  fais ce genre d'exercice mais je n'utilise pas le retour des fonctions mais j'utilise plutôt une méthode asynchrone. J'effectue l'appel de fonction avec les bons paramètres comme tu le fais mais pour récupèrer le résultat je demande au Javascript de faire un appel à  une méthode Objective-C en passant le résultat en paramètre.
    J'utilise surtout cette méthode pour récupérer plusieurs résultats mais ça pourrait régler ton problème.
  • RocouRocou Membre
    21:44 modifié #3
    dans 1256892082:

    Bonjour,
    J'ai déjà  fais ce genre d'exercice mais je n'utilise pas le retour des fonctions mais j'utilise plutôt une méthode asynchrone. J'effectue l'appel de fonction avec les bons paramètres comme tu le fais mais pour récupèrer le résultat je demande au Javascript de faire un appel à  une méthode Objective-C en passant le résultat en paramètre.
    J'utilise surtout cette méthode pour récupérer plusieurs résultats mais ça pourrait régler ton problème.

    Merci pour cette piste, celà  dit, de la doc sur javascript on en trouve en pagaille mais concernant le lien avec Cocoa, c'est déjà  plus rare.
    Un petit exemple d'un appel à  une méthode Objective-C en passant le résultat en paramètre serait le bienvenu  :why?:
  • Fallout88Fallout88 Membre
    21:44 modifié #4
    J'ai pas super le temps et de code sous la main mais j'ai un lien qui pourrait t'aider.

    http://developer.apple.com/mac/library/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/ObjCFromJavaScript.html

    Bon c'est un lien d'Apple donc pas nécessairement le plus simple mais il m'a bien aider.Si tu butes alors j'essayerais de t'aider un peu plus
Connectez-vous ou Inscrivez-vous pour répondre.