我一直無法在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來說屬於中等新手),所以我不確定從哪裏開始(但我會繼續研究)。