我正在尝试将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。
答案 0 :(得分:0)
从html导入bundle.js
时,假设您要通过npm安装整个程序,则js本身可能会引用其他js文件,而不是可以下载和使用的某些静态文件。这就是为什么它可以在html中工作的原因,js文件可以找到它的引用。从另一方面来说,可能不会。
通常,Swift并不擅长使用javascript文件。另外,您将很难维护两段代码。如果您尝试进行加密,请尝试使用本机Swift和Objective-c库,例如CryptoSwift