Frage

Kurze Frage: Worauf bezieht sich die "SourceID" einer Ausnahme und wie kann ich sie mit der entsprechenden Quellzeichenfolge/Datei verknüpfen?

Längere Geschichte:

Ich leite Javascript -Code in einer iPhone nativen App durch [UIWebView stringByEvaluatingJavaScriptFromString:]. Um die Entwicklung zu unterstützen und später von dem Benutzer bereitgestellten Code zu überprüfen, verwende ich die folgende Funktion, um einen sicheren Code sicher auszuführen:

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

Wenn alles gut geht, [MyJS runJS:js] Läuft gut und gibt eine JSON -Zeichenfolge zurück, die das Ergebnis der Bewertung der letzten Anweisung im Code 'JS' enthält.

Wenn jetzt während der Bewertung schlechte Dinge passieren, bekomme ich ein JSONIDIFIDED -Ausnahmebobjekt. Beispielsweise bekomme ich im Falle eines Syntaxfehlers im Code 'JS' so etwas wie folgt:

{"Nachricht": "Parse ERROR", "Zeile": 1, "SourceId": 26121296}

Das ist bereits sehr nützlich, um Probleme zu verfolgen ...

Da ich jedoch mehrere Strings durchläufe runJS:, Ich möchte in der Lage sein, zu bestimmen, welche die Ausnahme verursacht hat (da ein Laufzeitfehler aus einer Funktion stammen könnte, die in einer früheren JavaScript -Codezeichenfolge erstellt wurde). Diese "SourceId" -Mobilie sieht interessant aus, aber ich kann nicht finden, worauf sie zeigt. Es sieht aus wie eine Zeigeradresse (ähnlicher Wert wie Zeiger auf andere Objekte), aber es stimmt nicht mit einem der Zeichenfolgen überein, die ich an den Evaluator übergeben habe. Wie kann ich diesen Link machen?

Für Bonuspunkte: Gibt es eine Dokumentation über die UIWebView-spezifische JavaScript-Umgebung, wie dieses Ausnahmeobjekt? Das Safari -Webinhaltsleitfaden ist nett, geht aber nicht auf diese Art von Details.

War es hilfreich?

Lösung

Schlimmste Lösung:

In jeder zu bewertenden JS -Zeichenfolge fügen Sie einen Code hinzu, der eine Ausnahme ausführt, fängt sie ein, extrahiert die SourceId und legt sie irgendwie aus, damit die runJS: Die Methode kann einen Datensatz von welcher SourceID mit welcher Zeichenfolge behalten.

(Hoffentlich wird jemand einen besseren Weg finden und helfen, diese hässliche Antwort zu begraben!)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top