2017-10-25 10 views
2

私はJavaScriptファイルからコードを呼び出すiOS/JavaScriptCoreアプリケーションを作成しています。私のJavascriptコードは、socket.io.jsをインポートして作成した 'io'変数に依存します。 JavascriptはすべてHTMLファイルからロードされたときに正常に動作しますが、socket.io.jsをJavaScriptCoreにロードすると、io変数は定義されず、自分自身のJavascriptは実行できません。iOS用のJavaScriptCoreにsocket.ioをロード

マイJSCoreコードは次のようになりますevaluateScriptインポートsocket.ioファイル... TypeError: undefined is not an object (evaluating 'Object.prototype') runInContext webpack_require webpack_require webpack_require webpackUniversalModuleDefinition

ConnectToServer関数上で実行するとき...コンテキストのために定義され

NSString *socketPath = [[NSBundle mainBundle] pathForResource:@"socket.io" ofType:@"js"]; 
NSString *socketJS = [NSString stringWithContentsOfFile:socketPath encoding:NSUTF8StringEncoding error:nil]; 
JSValue *socketEval = [context evaluateScript: socketJS]; 

NSString *arPath = [[NSBundle mainBundle] pathForResource:@"arFunctions" ofType:@"js"]; 
NSString *arJS = [NSString stringWithContentsOfFile:arPath encoding:NSUTF8StringEncoding error:nil]; 
JSValue *arEval = [context evaluateScript: arJS]; 

JSValue *function = context[@"connectToServer"]; 
JSValue *result = [function callWithArguments:nil]; 

例外ハンドラは、これらのエラーを返します。関数は、io変数が定義されていることを期待しているため失敗します。誰かがsocket.io.jsでevaluateScriptを呼び出すと、io変数がコンテキスト内に作成されない理由を知っていますか? runInContextとwebpackUniversalModuleDefinitionが評価されたときにsocket.ioに予想される定義やその他のリソースがないようですが、HTMLファイルと同じ順序で同じJavascriptファイルをロードしています。私はここで何が欠けていますか?

は、私は感謝iOSの11のために

MacOSのハイシエラ上のXcode 9に開発しています!

+0

は、それがwindow.WebSocket()を提供するブラウザ環境ですか? – dandavis

+0

ブラウザで実行されていません。これはARkit iOSアプリケーションです。 –

答えて

0

JavaScriptCoreコードをHigh Sierraに移行すると、同じ問題が発生する可能性があります。

私の場合、問題は、URLのパスに基づいてその内容をソートした列挙子を返す-[NSFileManager enumeratorAtURL: includingPropertiesForKeys: options: errorHandler:]への私の無関係の依存から来ました。これは、以前はmacOS 10.12の場合でしたが、10.13ではそうではないようですが、その順序は未知のファイルシステムのプロパティによって決定されるようです。

関連する問題