javascript - 将 socket.io 加载到 JavaScriptCore for iOS

标签 javascript ios objective-c socket.io javascriptcore

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

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

<pre><code>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]; </code></pre>

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

connectToServer 函数失败,因为它需要定义 io 变量。有人知道为什么当我在 socket.io.js 上调用 evaluateScript 时没有在上下文中创建 io 变量吗?看起来 socket.io 在评估 runInContext 和 webpackUniversalModuleDefinition 时缺少预期的定义或其他资源,但我正在以与我的 HTML 文件中相同的顺序加载完全相同的 Javascript 文件。我在这里缺少什么?

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

谢谢!

最佳答案

在将工作的 JavaScriptCore 代码迁移到 High Sierra 时,我可能遇到过同样的问题。

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

关于javascript - 将 socket.io 加载到 JavaScriptCore for iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46941643/

相关文章:

iphone - 如何从数组中特定索引处删除对象

iphone - 工作流 iOS 应用程序/自定义导航 + 标签栏 Controller

javascript - 在 javascript 中复制函数

javascript - Angular ng-show、ng-hide 和 ng-if 未按预期工作

ios - 自定义类来更改多个 VC 中的背景;类型 "class"没有成员 "x"

objective-c - 在不拆分最后一个单词的情况下切割 NSString 的长度

ios - 在 iOS 中创建消息屏幕

javascript - 更换推特按钮

javascript - 检查当前事件元素是否是任何类型的输入

ios - SEL 在 iOS 中作为 IBOutlet