繁体   English   中英

将socket.io加载到iOS的JavaScriptCore中

[英]Loading socket.io into JavaScriptCore for iOS

我正在编写一个iOS / JavaScriptCore应用,该应用从Java文件中调用代码。 我的Javascript代码取决于通过导入socket.io.js创建的“ io”变量。 从HTML文件加载Javascript时一切正常,但是当我将socket.io.js加载到JavaScriptCore中时,io变量未定义,我自己的Javascript无法运行。

我的JSCore代码看起来像这样...

 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]; 

当评估脚本在导入的socket.io文件上运行时,为上下文定义的异常处理程序将返回这些错误TypeError: undefined is not an object (evaluating 'Object.prototype') runInContext webpack_require webpack_require webpack_require webpackUniversalModuleDefinition

connectToServer函数失败,因为它期望已定义io变量。 有谁知道为什么在socket.io.js上调用EvaluationScript时不会在上下文中创建io变量? 在评估runInContext和webpackUniversalModuleDefinition时,socket.io似乎缺少预期的定义或其他资源,但是我以与HTML文件中相同的顺序加载完全相同的Javascript文件。 我在这里想念什么?

我正在针对iOS 11的macOS High Sierra上的Xcode 9进行开发。

谢谢!

将有效的JavaScriptCore代码迁移到High Sierra时,我可能遇到了同样的问题。

在我的情况下,这个问题是由于我不知不觉地依赖-[NSFileManager enumeratorAtURL: includingPropertiesForKeys: options: errorHandler:]返回了一个枚举器,该枚举器已根据URL的路径对其内容进行了排序。 在macOS 10.12中曾经是这种情况,但在10.13中似乎并非如此,在10.13中,顺序似乎由某些未知的文件系统属性决定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM