【发布时间】:2016-11-05 07:48:37
【问题描述】:
我无法在 iOS Objective-C JavaScriptCore JSContext 中运行 proj4.js(投影 Javascript,http://proj4js.org)。尝试在上下文中运行它后,proj4 函数对我尝试在同一 JSContext 中运行的后续 Javascript 代码不可用。
在 JSContext 上启用 Javascript 异常处理后,我发现在尝试运行 proj4.js 时出现以下异常:
TypeError: undefined is not an object (evalating 'b.proj4=a()')
我已经通过一些加载脚本的 HTML 在 WKWebView 中成功运行了相同的 proj4.js。在那里工作正常。但我现在需要它在 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 也比较陌生),所以我不知道从哪里开始(但我会继续研究)。
【问题讨论】:
标签: javascript ios objective-c cocoa javascriptcore