Swift JavaScriptCore 不能处理大文件?

Posted

技术标签:

【中文标题】Swift JavaScriptCore 不能处理大文件?【英文标题】:Swift JavaScriptCore not working with large files? 【发布时间】:2018-01-28 14:14:44 【问题描述】:

https://github.com/gg2001/monero/blob/master/monero/NewWallet.js

我有一个相当大的 6000 行的 js 文件,javascript 核心似乎无法检索变量值,而在任何 Web 浏览器中运行相同的文件对我来说都很好。当我尝试检索变量的值时,它显示为未定义,但是当我在浏览器中使用 js 控制台时,它显示得很好。我推测这是由于文件的大小,因为当我放

var helloWorld = "Hello World";

在js文件的前面这个swift代码可以检索它

func helloWorld() 
        if let variableHelloWorld = self.jsContext.objectForKeyedSubscript("helloWorld") 
            print(variableHelloWorld.toString())
        
    

但是当我把它放在最后时它不能。

【问题讨论】:

【参考方案1】:

通常这表示解析错误。尝试在调用objectForKeyedSubscript() 之前向self.jsContext 添加错误处理程序,看看它是否输出任何有见地的信息。

self.jsContext.exceptionHandler =  context, exception in
    print("JS Error: \(exception?.description ?? "unknown error")")

虽然您的 JS 代码可能在浏览器控制台中有效,但 ios Safari 不支持与较新浏览器一样多的 Javascript 功能。

我确实在您的 JS 源代码中看到了一行以分号开头的行(紧随其后的是 (function)。我想知道解析器是否会抱怨没有声明的空行..?不过也许什么都没有。

【讨论】:

通过实现 WKWebView 并避免使用 JavaScriptCore 找到了一个解决方案,所以我从来没有尝试过这个。希望这可以解决其他人的问题。

以上是关于Swift JavaScriptCore 不能处理大文件?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScriptCore evaluateScript 不能处理对象?

swift 在swift中使用javascriptcore

无法使用 JavaScriptCore 中的 Swift 类

Swift Playgrounds 中的 JavaScriptCore

如何在 Swift 的 JavaScriptCore 中导入模块?

swift和Javascriptcore的异步通信