【问题标题】:Loading socket.io into JavaScriptCore for iOS将 socket.io 加载到 iOS 的 JavaScriptCore
【发布时间】:2018-04-07 02:06:27
【问题描述】:

我正在编写一个从 Javascript 文件调用代码的 iOS/JavaScriptCore 应用程序。我的 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];

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

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

我正在为 iOS 11 在 macOS High Sierra 上开发 Xcode 9。

谢谢!

【问题讨论】:

  • 是提供window.WebSocket()的浏览器环境吗?
  • 它没有在浏览器中运行。它是一个 ARkit iOS 应用程序。
  • 我认为 JavaScriptCore 环境缺少与 SocketIO 用于建立其 Web 套接字连接等相关的所有浏览器 API。你有没有得到这个工作?

标签: javascript ios objective-c socket.io javascriptcore


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多