justlikebefore
justlikebefore
  • 发布:2019-03-11 11:58
  • 更新:2021-01-05 17:08
  • 阅读:4485

【已解决】请问Hbuilder X 在「运行-到浏览器」和「发布为-h5」在编译时有哪些不同?我的 web3.js 两种方式编译出来运行效果不一样。

分类:HBuilder

我做以太坊应用,web3.js 版本号为 1.0.0-beta.48,在Hbuilder中运行到浏览器时,运行正确,而通过 发布-> h5 编译出来之后,调用 web3.eth.getBalance() 函数签名出来的参数即是错误的。 在设想是否因测试和生产两种编译方式不同导致的。

通过发布-h5编译出来地的参数为(如下可见 methods 里多了一层):

{  
    "jsonrpc":"2.0",  
    "id":31,  
    "method":{  
        "jsonrpc":"2.0",  
        "id":30,  
        "method":"eth_getBalance",  
        "params":[  
            "0x7c3d30c9bafb371f81aa0fa00c18a54dea02c5de",  
            "latest"  
        ]  
    }  
}

而通过运行-浏览器编译出来则运行正确,为:

{  
    "jsonrpc":"2.0",  
    "id":12,  
    "method":"eth_getBalance",  
    "params":[  
        "0x7c3d30c9bafb371f81aa0fa00c18a54dea02c5de",  
        "latest"  
    ]  
}
2019-03-11 11:58 负责人:无 分享
已邀请:
justlikebefore

justlikebefore (作者) - 独立开发者

找到原因了,是因为 web3-providers 里面用了硬编码来判断对象所属类,如下:

switch (provider.constructor.name) {  
            case 'HttpProvider':  
            case 'IpcProvider':  
            case 'WebsocketProvider':  
            case 'CustomProvider':  
            case 'MetamaskProvider':  
            case 'MistEthereumProvider':  
            case 'Web3EthereumProvider':  
              return true;  
          }

而编译之后,取出的 provider.constructor.name = 'e'

6***@qq.com

6***@qq.com

请问您知道web3.eth.getBalance()在真机运行时报错
Uncaught (in promise) TypeError: this.init is not a function at __uniappservice.html:2
怎么解决吗?

1***@163.com

1***@163.com - 前端

你好。我也在做这个,想问下你通过npm下载web3引入报错bota is undefined是什么原因啊?我也查了资料说是buffer,我也用了不起作用

y***@163.com

y***@163.com - Android开发者

为啥 我点击 发布为-h5 没有反应啊。来自小白的求助 。

1***@qq.com

1***@qq.com - 胖虎


```javascript
```javascript
```javascript
```javascript  

该问题目前已经被锁定, 无法添加新回复