2010-01-11 3 views
3

Question succincte: à quoi fait référence l'identificateur "sourceID" d'une exception, et comment puis-je le lier à la chaîne/au fichier source pertinent?Comment associer une sourceId de l'exception jIuVIEW de UIWebView à un fichier source?

plus longue histoire:

Je courais code Javascript dans une application native iPhone via [UIWebView stringByEvaluatingJavaScriptFromString:]. Pour aider le développement, et vérifier plus tard le code fourni par l'utilisateur, utiliser la fonction suivante pour exécuter en toute sécurité tout code:

// Inside @implementation MyJS 
- (NSString *)runJS:(NSString *)js { 
    // Do some escaping on 'js' to make it look like a string literal. 
    js = escape(js); 
    NSString *result = 
     [webView stringByEvaluatingJavaScriptFromString: 
      [NSString stringWithFormat:@"try { JSON.stringify(eval(\"%@\")); } except (e) { JSON.stringify(e); }", js] 
     ]; 
    return result; 
} 

Si tout va bien, [MyJS runJS:js] se passe bien et retourne une chaîne JSON contenant le résultat de l'évaluation des la dernière déclaration dans le code 'js'.

Maintenant, si de mauvaises choses se produisent pendant l'évaluation, j'obtiens un objet d'exception JSONified. Par exemple, dans le cas d'une erreur de syntaxe dans le code 'js', je reçois quelque chose comme ceci:

{ "message": "Parse error", "ligne": 1, "sourceid": 26121296}

Ce qui est déjà très utile pour suivre les problèmes ...

Cependant, comme je lance plusieurs chaînes par runJS:, je voudrais être en mesure d'identifier lequel a provoqué l'exception (car une erreur d'exécution pourrait provenir d'une fonction qui a été créée dans une chaîne de code javascript précédente). Cette propriété "sourceId" a l'air intéressante, mais je ne trouve pas ce qu'elle indique. Cela ressemble à une adresse de pointeur (valeur similaire aux pointeurs vers d'autres objets), mais elle ne correspond à aucune des chaînes que j'ai passées à l'évaluateur. Comment puis-je faire ce lien? Pour les points bonus: Y a-t-il de la documentation disponible sur l'environnement javascript spécifique à UIWebView, comme cet objet d'exception? Le Safari Web Content Guide est agréable, mais ne va pas dans ce genre de détails.

Répondre

2

solution pire cas:

l'intérieur de chaque chaîne js en cours d'évaluation, ajouter un peu de code qui lance une exception, l'attrape, extrait le sourceid et il expose en quelque sorte de sorte que la méthode runJS: peut tenir un registre dont sourceid va avec quelle chaîne.

(J'espère que quelqu'un trouvera un meilleur moyen et aidera à enterrer cette réponse laide!)

Questions connexes