钱包内输入地址,无法拿到nervos实例

在Android studio调试的官方钱包内测试的,用的是webpack打包,依然无法拿到nervos实例

demo已更新在这里,帮我看看配置哪里出错
lanzous.com

代码如下

package.json

{
“name”: “webpack-sample-project”,
“version”: “1.0.0”,
“description”: “Sample webpack project”,
“scripts”: {
“start”: “webpack”,
“webpack”: “webpack”,
“dev”: “webpack-dev-server”
},
“author”: “fx”,
“license”: “ISC”,
“dependencies”: {
“webpack”: “latest”,
“webpack-dev-server”: “latest”,
@nervos/chain”: “^0.17.10”
},
“devDependencies”: {
“webpack”: “^4.17.1”,
“webpack-cli”: “^3.1.0”,
“babel-cli”: “^6.26.0”,
“babel-core”: “^6.26.3”,
“babel-eslint”: “^8.2.3”,
“babel-loader”: “^7.1.4”,
“babel-preset-es2015”:“latest”,
“babel-preset-stage-3”:“latest”,
“json-loader”: “^0.5.7”,
“node-sass”: “^4.9.0”,
“sass-loader”: “^7.0.3”,
“css-loader”: “^0.28.11”,
“style-loader”: “^0.21.0”,
“html-webpack-plugin”:“latest”,
“webpack-dev-server”: “latest”
}
}

可能是webpack.config.js配置问题

webpack.config.js

const path = require(‘path’);
const htmlPlugin = require(‘html-webpack-plugin’)

module.exports = {
entry: {
path: ‘./src/scripts/index.js’
},
output: {
path: path.resolve(__dirname, ‘dist’),
filename:‘js/[name].js’
// filename: ‘[name].js’
},
module: {
rules: [
{ test: /.s?css$/, use: [ ‘style-loader’, ‘css-loader’, ‘sass-loader’ ] },
{
test: /.js$/,
exclude: /(node_modules|bower_components)/,
loader: ‘babel-loader’,
query: {
presets: [‘es2015’,‘stage-3’],
plugins:
}
}
]
},
plugins: [
new htmlPlugin({
minify: {
removeAttributeQuotes: true
},
hash: true,
template: ‘./src/index.html’
})
],

devServer: {
    contentBase: path.resolve(__dirname, 'dist'),   // 服务路径
    inline: true,//实时刷新
    compress:true,//服务端压缩是否开启,一般设置为开启,
    host: '192.168.0.109',
    port: 8080
}

}

manifest.json

{
“name”: “hello”,
“blockViewer”: “https://etherscan.io/”,
“chainSet”: {
“1”: “http://121.196.200.225:1337
},
“icon”: “http://7xq40y.com1.z0.glb.clouddn.com/23.pic.jpg”,
“entry”: “./index.html”,
“provider”: “https://cryptape.com/
}

nervos.js

const { default: Nervos } = require(‘@nervos/chain’) // 引入 Nervos 实例

const config = require(‘./config’)

console.log(window.nervos);
if (typeof window.nervos !== ‘undefined’) { // 检测当前浏览器环境 window 中是否有 nervos 实例,如果有的话,用window.nervos 中的currentProvider 实例化 Nervos
window.nervos = Nervos(window.nervos.currentProvider);
console.log(‘=====nervos ok======’)
window.nervos.currentProvider.setHost(“https://node.cryptape.com”); // 由于存在多链的情况,需要 DApp 指明当前 AppChain 的节点IP地址信息,对于单链 DApp 只需要指定一次即可。
} else {
console.log(‘No nervos? You should consider trying Neuron!’)// 如果当前浏览器环境 window 中没有 nervos 实例,则需要手动提供节点IP地址,并完成实例化
window.nervos = Nervos(config.chain);

}
var nervos = window.nervos

module.exports = nervos

index.html

<link rel="manifest" href="./manifest.json">
<title>webpack_demo1</title>

hello woo2

open nervos

index.js

import ‘…/styles/app.css’

import { nervos,transaction, simpleStoreContract } from ‘./simpleStore’

// import nervos from ‘./nervos’

window.App={

click:function(){
    console.log('click-ok');
    console.log(nervos);
    nervos.appchain.getBlockNumber().then(current => {
        var text='';
        var time=new Date().getTime();
        const tx = {
            ...transaction,
            from:window.neuron.getAccount(),
            validUntilBlock: +current + 88,
        }
        // this.setState({
        //   submitText: submitTexts.submitting,
        // })
        console.log("add account=====" + window.neuron.getAccount()+'--current:'+current)
        var that = this;
        simpleStoreContract.methods.add(text, time).send(tx, function(err, res) {
            if (res) {
                nervos.listeners.listenToTransactionReceipt(res).then(receipt => {
                    if (!receipt.errorMessage) { 
                        // console.log('submitTexts.submitted='+submitTexts.submitted );
                    //   that.setState({ submitText: submitTexts.submitted })
                    } else {
                        throw new Error(receipt.errorMessage)
                    }
                })
            } else {
                // that.setState({ submitText: submitTexts.normal })
                console.log('error==========='+err)
            }
        })
    })

    
}

}

config.js

const config = {
chain: ‘https://node.cryptape.com’,
contractAddress: ‘0x23072A5E3E5294BEFD4BAA09B26129f88Be4ed8D’,
}
module.exports = config

https://github.com/cryptape/nervos-appchain-docs/blob/develop/zh-CN/quick-start/build-dapp.md 这篇文档详细介绍开发 AppChain DApp的详细过程,你不妨可以先看一下,如果还有问题,欢迎和我们联系

看过了,官方的示例没问题,我的demo不行

有几个我看到的问题,可能需要你先改一下:

  1. manifest.json 文件中是不能用 // 注释的,文档中是为了表述方便,json格式的文件用// 添加注释是会报错的
  2. src 目录下为什么没有manifest.json文件呢
  3. index.html中没有给出manifest.json的文件路径
  4. 你可以在Android Studio 的config.gradle 中打开调试模式,通过USB连上手机,然后在 chrome 浏览器中输入 chrome://inspect ,就能看到H5页面的执行效果,而且旁边还有控制台等窗口,方便你查看错误日志
1 Like

不行,demo不知你测试过没有,manifest去注释了,加路径后,你说的都试了,一样的问题,我用的是webpack打包的,麻烦你测试下

请直接在论坛里贴出相关代码吧, 这样也方便以后归档和给其他用户学习.
针对 nervos 实例无法获得的问题, 需要看一下 demo 中实例化过程的相关代码.

你能在官方demo的基础上修改代码而不是重建一个工程吗。既然官方demo可以,新建的工程不可以,肯定是某个环节没有match上,你可以把官方demo文件逐步替换来debug。

官方是用react-scripts构建的,我想用webpack构建

看了你的webpack设置,感觉没什么问题,因为本地可以从window中拿到nervos对象。我觉得你模拟器里的neuron钱包中nervos注入没有成功。你可以用你的模拟器换一个别的dapp试试吗,看看neuron能不能注入成功。