簡単な質問:例外の「sourceID」は何を指し、関連するソース文字列/ファイルにリンクするにはどうすればよいですか?
長い話:
を介してiPhoneネイティブアプリでJavascriptコードを実行してい[UIWebView stringByEvaluatingJavaScriptFromString:]
ます。開発を支援し、後でユーザー提供のコードを確認するために、次の関数を使用してコードを安全に実行します。
// 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;
}
すべてがうまくいけば、正常に[MyJS runJS:js]
実行され、「js」コードの最後のステートメントの評価結果を含むJSON文字列が返されます。
これで、評価中に悪いことが起こった場合、JSON化された例外オブジェクトを取得します。たとえば、「js」コードの構文エラーの場合、次のようになります。
{"メッセージ": "解析エラー"、 "行":1、 "sourceId":26121296}
これは、問題を追跡するのにすでに非常に役立ちます...
ただし、複数の文字列を実行するrunJS:
ときに、例外の原因となった文字列を特定できるようにしたいと思います(以前のJavaScriptコード文字列で作成された関数からランタイムエラーが発生する可能性があるため)。この「sourceId」プロパティは面白そうに見えますが、それが何を指しているのかわかりません。ポインタアドレス(他のオブジェクトへのポインタと同様の値)のように見えますが、評価者に渡した文字列のいずれとも一致しません。このリンクを作成するにはどうすればよいですか?
ボーナスポイントについて:この例外オブジェクトのように、UIWebView固有のjavascript環境について利用できるドキュメントはありますか?Safari Webコンテンツガイドは素晴らしいですが、この種の詳細には触れていません。