문제

짧은 질문 : "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 문자열을 반환합니다.

이제 평가 중에 나쁜 일이 발생하면 JSONIFED EXCERTION 객체를 얻습니다. 예를 들어, 'JS'코드의 구문 오류가 발생하면 다음과 같은 것을 얻습니다.

{ "message": "parse error", "line": 1, "sourceId": 26121296}

이미 문제를 추적하는 데 매우 유용합니다 ...

그러나 여러 줄을 통과 할 때 runJS:, 이전 JavaScript 코드 문자열에서 생성 된 함수에서 런타임 오류가 발생할 수 있기 때문에 어떤 예외가 발생했는지 정확히 알고 싶습니다. 이 "SourceId"속성은 흥미로워 보이지만 포인트를 찾을 수는 없습니다. 포인터 주소 (다른 객체와의 포인터와 유사한 값)처럼 보이지만 평가자에게 전달한 문자열과 일치하지 않습니다. 이 링크를 어떻게 만들 수 있습니까?

보너스 포인트 :이 예외 객체와 같은 UIWebView 별 JavaScript 환경에 대한 문서가 있습니까? 그만큼 사파리 웹 컨텐츠 가이드 좋지만 이런 종류의 세부 사항으로 들어 가지 않습니다.

도움이 되었습니까?

해결책

최악의 솔루션 :

평가중인 각 JS 문자열 내부에서 예외를 던지는 코드를 추가하고, 잡고, 소스를 추출하고, 어떻게 든 노출되어 runJS: 메소드는 어떤 sourceid가 어떤 문자열과 함께 갈 것인지에 대한 레코드를 유지할 수 있습니다.

(누군가가 더 나은 방법을 찾고이 추악한 대답을 묻도록 도와 줄 것입니다!)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top