Domanda

Breve domanda: cosa fa di un'eccezione "sourceid" si riferiscono a, e come posso collegarlo alla stringa di origine / relativo file

storia più lunga:

Sono in esecuzione di codice JavaScript in un app nativa iPhone attraverso [UIWebView stringByEvaluatingJavaScriptFromString:]. Per aiutare lo sviluppo, e più tardi il check codice fornito dagli utenti, io uso la funzione seguente per eseguire in tutta sicurezza qualsiasi codice:

// 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;
}

Se tutto va bene, [MyJS runJS:js] funziona bene e restituisce una stringa JSON contenente il risultato della valutazione dell'ultima istruzione nel codice 'js'.

Ora, se accadono cose brutte nel corso della valutazione, ottengo un oggetto eccezione JSONified. Ad esempio, nel caso di un errore di sintassi nel codice 'js', ho qualcosa di simile:

  

{ "messaggio": "Errore Parse", "linea": 1, "sourceid": 26.121.296}

Il che è già molto utile per tenere traccia dei problemi ...

Tuttavia, come ho eseguito più stringhe attraverso runJS:, mi piacerebbe essere in grado di individuare quale ha causato l'eccezione (a causa di un errore di runtime potrebbe venire da una funzione che è stato creato in una stringa di codice javascript precedente). Questa struttura "sourceid" sembra interessante, ma non riesco a trovare ciò a cui punta. Sembra un indirizzo di puntatore (valore simile come puntatori ad altri oggetti), ma non corrisponde con una delle stringhe che ho passato al valutatore. Come posso fare questo link?

Per i punti bonus: C'è qualche documentazione disponibile per l'ambiente javascript UIWebView-specifici, come questo oggetto di eccezione? Il rel="nofollow guida sui contenuti Safari Web è bello, ma non va in questo tipo di dettagli.

È stato utile?

Soluzione

soluzione di caso peggiore:

All'interno di ogni JS stringa in corso di valutazione, aggiungere un po 'di codice che genera un'eccezione, la prende, estrae il sourceid e in qualche modo espone in modo che il metodo runJS: può tenere un registro di cui sourceid va con quale stringa.

(Speriamo che qualcuno troverà un modo migliore e contribuire a seppellire questa risposta brutto!)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top