【问题标题】:How can I inject and use this javascript library (web3) with JavascriptCore如何通过 JavascriptCore 注入和使用这个 javascript 库 (web3)
【发布时间】:2018-04-14 06:13:27
【问题描述】:

我一直在尝试在 Swift 中将 web3 库与 JavascriptCore 一起使用。通过运行创建一个 web3 实例

var web3 = new Web3(new Web3.providers.HttpProvider("[the provider im using]"))

这是我试图在 Swift 中执行此操作的代码:

if let url = Bundle.main.url(forResource: "web3", withExtension: "js"){
     let lib = try! String(contentsOfFile: url.path)
     let jsvirtualmachine = JSVirtualMachine()
     let context = JSContext(virtualMachine: jsvirtualmachine)
     context.evaluateScript(lib)

     let web3 = context.evaluateScript("var web3 = new Web3(new Web3.providers.HttpProvider('[myprovider]')")
     let fn = context.objectForKeyedSubscript("web3")
     let fn1 = fn?.construct(withArguments: [])
     let latestBlockNumber = context.evaluateScript("web3.eth.blockNumber")
     print(latestBlockNumber)
}

我已经尝试打印出 latestBlockNumber、web3、fn 和 fn1,它们都返回 undefined

有什么想法吗?

【问题讨论】:

  • 这次尝试成功了吗?

标签: javascript swift ethereum javascriptcore web3


【解决方案1】:

web3.js 库依赖于bignumber.jscrypto-js.js(请参阅dependencies here)。您需要将这两个 JS 库添加到包中并以类似的方式加载它们,例如

do {
    let bigNumberJS = try String(contentsOf: Bundle.main.url(forResource: "bignumber.min", withExtension: "js")!, encoding: .utf8)
    let cryptoJS = try String(contentsOf: Bundle.main.url(forResource: "crypto-js", withExtension: "js")!, encoding: .utf8)
    let web3JS = try String(contentsOf: Bundle.main.url(forResource: "web3-light.min", withExtension: "js")!, encoding: .utf8)
    context.evaluateScript(bigNumberJS)
    context.evaluateScript(cryptoJS)
    context.evaluateScript(web3JS)
    context.evaluateScript("var Web3 = require('web3'); var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));")
    if let version = context.evaluateScript("web3.version.api") {
        print("Web3 version is \(version)")
    }
}
catch {
    print("An error occurred")
}

【讨论】:

  • 嗨,与 bignumber 不同,crypto-js 有多个文件。如何处理?
  • 他们的每个版本都包含一个crypto-js.js,其中包含一个文件中的所有内容。尝试下载最新版本的 zip 文件。 github.com/brix/crypto-js/releases/tag/3.1.9-1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多