Swift JSContext总是返回nil

时间:2018-07-09 16:16:57

标签: javascript ios swift

我正在尝试将EOS JavaScript library集成到我的iOS应用程序中。我已经安装了一个npm模块,并使用 browserify 创建了一个捆绑文件。该代码如下所示:

'use strict';
var ecc = require('eosjs-ecc')

module.exports = ecc;

然后我运行命令: browserify index.js --standalone ecc> bundle.js

将其集成到一个简单的HTML文件中是可行的,因此,如果我对它们在Github上提供的示例进行测试,如下所示:

<html>
 <head>
   <meta charset="utf-8">
   <script src="bundle.js"></script>
 </head>
<body>
<script type="text/javascript">
    let gg = ecc.randomKey().then(privateKey => {
        console.log('Private Key:\t', privateKey) // wif
        console.log('Public Key:\t', ecc.privateToPublic(privateKey)) // EOSkey...
        })
</script>

我将输出到控制台。但是,将其集成回iOS应用程序无效。

这是我的代码:

import JavaScriptCore

class EOSJSService {

  var jsContext: JSContext!

  init() {
    self.jsContext = JSContext()

    if let jsSourcePath = Bundle.main.path(forResource: "bundle", ofType: "js") {
        do {
            let jsSourceContents = try String(contentsOfFile: jsSourcePath)

            self.jsContext.evaluateScript(jsSourceContents)
            initEOS()
        }
        catch {
            print(error.localizedDescription)
        }
    } else {

    }
  }

  private func initEOS() {
     let test = jsContext.evaluateScript("ecc")

  }
}

无论我在jsContext.evaluateScript中添加了什么,它总是返回未定义的。我尝试将其捆绑到一个类中,在其中放置一个虚拟的hello world变量,该变量总是返回undefined。

1 个答案:

答案 0 :(得分:0)

从html导入bundle.js时,假设您要通过npm安装整个程序,则js本身可能会引用其他js文件,而不是可以下载和使用的某些静态文件。这就是为什么它可以在html中工作的原因,js文件可以找到它的引用。从另一方面来说,可能不会。

通常,Swift并不擅长使用javascript文件。另外,您将很难维护两段代码。如果您尝试进行加密,请尝试使用本机Swift和Objective-c库,例如CryptoSwift