Короткий вопрос: на что ссылается «sourceID» исключения и как я могу связать его с соответствующей исходной строкой / файлом?
Более длинная история:
Я запускаю код Javascript в родном приложении iPhone через [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]
работает нормально и возвращает строку JSON, содержащую результат вычисления последнего оператора в коде 'js'.
Теперь, если во время оценки происходят плохие вещи, я получаю объект исключения JSONified. Например, в случае синтаксической ошибки в коде 'js' я получаю что-то вроде этого:
{"message": "Ошибка разбора", "строка": 1, "sourceId": 26121296}
Что уже весьма полезно для отслеживания проблем ...
Однако, когда я запускаю несколько строк через runJS:
, я хотел бы иметь возможность точно определить, какая из них вызвала исключение (поскольку ошибка времени выполнения может исходить от функции, созданной в предыдущей строке кода javascript). Это свойство «sourceId» выглядит интересно, но я не могу найти то, на что оно указывает. Он выглядит как адрес указателя (значение, аналогичное указателям на другие объекты), но не соответствует ни одной из строк, которые я передал в оценщик. Как я могу сделать эту ссылку?
Для бонусных баллов: есть ли какая-либо документация о Javascript-среде, специфичной для UIWebView, например об объекте исключения? Руководство по веб-контенту Safari приятно, но не вдаваться в подробности такого рода.