Мне не удалось запустить proj4.js (проекты Javascript, http://proj4js.org) в цели iOS -C JavaScriptCore JSContext. После попытки запустить его в контексте функции proj4 недоступны для последующего кода Javascript, который я пытаюсь запустить в том же JContext.
После включения обработки исключений Javascript в JContext я обнаружил, что получаю следующее исключение при попытке запустить proj4.js:
TypeError: undefined не является объектом (оценка 'b.proj4=a()')
Я успешно запустил тот же proj4.js в WKWebView через некоторый HTML, который загружает скрипт. Там нормально работает. Но теперь мне нужно, чтобы он работал в JContext, где я его использую и преобразовываю объекты из вывода Javascript в объекты Objective-C.
Вот код, который не работает:
NSString *proj4Path = [[NSBundle mainBundle] pathForResource:@"proj4" ofType:@"js" inDirectory:@"proj4"];
NSString *proj4JS = [NSString stringWithContentsOfFile:proj4Path usedEncoding:nil error:nil];
JSContext *context = [[JSContext alloc] init];
context.exceptionHandler = ^(JSContext *context, JSValue *exception) {
NSLog(@"JAVASCTIPT EXCEPTION: %@", exception);
};
[context evaluateScript:proj4JS]; // FAILS HERE
Если я заменю эту последнюю строку очень простым JavaScript, он будет работать нормально. Например,
[context evaluateScript:@"1 + 1"];
Таким образом, оказывается, что сам контекст является функциональным. Возможно, есть какие-то проблемы с окружением или конфигом JContext, но я ничего не могу придумать.
РЕДАКТИРОВАТЬ: Строка в proj4.js, которая вызывает исключение:
"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.proj4=a()
Таким образом, это будет означать, что ни «окно», ни «глобальный», ни «я» не определены в среде JSContext (я думаю?). Я новичок в JavaScriptCore (и умеренно новичок в JavaScript), поэтому я не уверен, что делать дальше (но я продолжу исследования).