如何通过 JavascriptCore 注入和使用这个 javascript 库 (web3)
Posted
技术标签:
【中文标题】如何通过 JavascriptCore 注入和使用这个 javascript 库 (web3)【英文标题】:How can I inject and use this javascript library (web3) with JavascriptCore 【发布时间】: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
有什么想法吗?
【问题讨论】:
这次尝试成功了吗? 【参考方案1】:web3.js
库依赖于bignumber.js 和crypto-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以上是关于如何通过 JavascriptCore 注入和使用这个 javascript 库 (web3)的主要内容,如果未能解决你的问题,请参考以下文章
一个人如何在JavaScriptCore中使用摩卡咖啡和柴? [关闭]
如何使用 JavaScriptCore 将错误记录到 XCode?
如何使用 JavaScriptCore 从 Swift 中的 javascript SDK 调用异步 javascript 函数