iOS Objective-C JavaScriptCore JSContext에서 proj4.js (projections Javascript, http://proj4js.org)를 실행할 수 없었습니다. 컨텍스트에서 실행하려고하면 proj4 함수는 동일한 JSContext에서 실행하려고하는 후속 Javascript 코드에서 사용할 수 없습니다. proj4.js 실행하려고 할 때JavaScriptCore JSContext에서 proj4.js를 실행할 수 없습니다.
JSContext에 자바 스크립트 예외 처리를 활성화 한 후, 나는 다음과 같은 예외를 얻을 것을 발견 :
TypeError: undefined is not an object (evaluating 'b.proj4=a()')
을 나는이 성공적으로 몇 가지를 통해 WKWebView에서 같은 proj4.js을 실행 스크립트를로드하는 HTML입니다. 잘 작동합니다. 하지만 이제는 JSContext에서 실행해야합니다. JSContext에서 객체를 사용하고 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
을 나는 매우 간단한 자바 스크립트와 마지막 줄은 잘 작동 것으로 교체하는 경우 :
다음은 실패 코드입니다. 예 :[context evaluateScript:@"1 + 1"];
따라서 문맥 자체가 작동하는 것으로 보입니다. 아마도 환경이나 JSContext의 설정에 문제가있을 수 있지만, 나는 아무것도 생각할 수 없다.
편집 : 예외가 발생 proj4.js의 행은 다음과 같습니다
"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.proj4=a()
그래서이 둘 다 '창'도 '글로벌'이나 '자기하는 것은'를 JSContext 환경에서 정의되지 않은 것을 나타냅니다 (I 생각한다?). 저는 JavaScriptCore에 익숙하지 않습니다. (자바 스크립트도 적당하지 않습니다.) 그래서 여기에서 어디로 가야할지 모르겠습니다. (하지만 계속 연구 할 것입니다.)