我一直无法在iOS Objective-C JavaScriptCore JSContext中运行proj4.js(预测Javascript,http://proj4js.org)。在尝试在上下文中运行它之后,proj4函数不能用于后来尝试在同一个JSContext中运行的Javascript代码。无法运行JavaScriptCore中的proj4.js JSContext
能够在JSContext的Javascript异常处理后,我发现我得到下面的异常试图运行proj4.js时:
TypeError: undefined is not an object (evaluating 'b.proj4=a()')
我已经成功地运行通过一些在WKWebView相同proj4.js加载脚本的HTML。在那里工作很好。但我现在需要它运行在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
如果我更换一个非常简单的JavaScript的最后一行,它工作正常。例如,
[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环境中定义(我认为?)。我是JavaScriptCore的新手(对于JavaScript来说属于中等新手),所以我不确定从哪里开始(但我会继续研究)。