uiwebview javascript例外のSourceIDをソースファイルに関連付けるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2040033

質問

短い質問:例外の「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文字列を返します。

評価中に悪いことが起こった場合、JSSONIFIED例外オブジェクトを取得します。たとえば、「JS」コードの構文エラーが発生した場合、次のようなものが得られます。

{"Message": "parse error"、 "line":1、 "sourceId":26121296}

これはすでに問題を追跡するのに非常に役立ちます...

ただし、複数の文字列を実行すると runJS:, 、例外を引き起こしたものを特定できるようにしたいと思います(以前のJavaScriptコード文字列で作成された関数からランタイムエラーが発生する可能性があるため)。この「SourceID」プロパティは興味深いように見えますが、それが指し示していることを見つけることができません。ポインターアドレスのように見えます(他のオブジェクトとのポインターと同様の値)が、評価者に渡した文字列のいずれにも一致しません。どうすればこのリンクを作成できますか?

ボーナスポイントの場合:この例外オブジェクトのように、UIWebview固有のJavaScript環境に関するドキュメントはありますか? Safari Webコンテンツガイド いいですが、この種の詳細には入りません。

役に立ちましたか?

解決

最悪の解決策:

評価されている各js文字列の内部では、例外をスローし、キャッチし、sourceIDを抽出し、何らかの形で露出するコードを追加して、 runJS: メソッドは、どのsourceIDがどの文字列を使用するかを記録することができます。

(うまくいけば、誰かがより良い方法を見つけて、この醜い答えを埋めるのを助けるでしょう!)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top