5.DApp-前端网页怎么连接MetaMask

news/2024/7/11 1:55:04 标签: 前端, 区块链, 智能合约, 开发语言, web3, jquery, html
htmledit_views">

题记

        在html" title=前端>前端网页连接metamask,以下是全部操作流程和代码。

编写index.html文件

        index.html文件如下:

<!DOCTYPE html>

<html>

  <head>

    <title>My DApp</title>

    <!--导入用于检测Metamask提供者的JavaScript库-->

    <script src="https://cdn.jsdelivr.net/npm/@metamask/detect-provider"></script>

    <script>

      //async是JavaScript中的一个关键字,用于定义一个异步函数。

      //异步函数是一种特殊类型的函数,它可以在执行期间暂停并在某个时间点后继续执行。

      //异步函数使用async关键字进行定义,并使用await关键字来暂停执行并等待异步操作完成。

      //在等待期间,JavaScript引擎可以继续执行其他代码。

      //当异步操作完成时,异步函数将恢复执行,并返回一个Promise对象,该对象包含异步操作的结果。

      async function connect() {

        // 检测Metamask是否已安装

        // 这行代码使用 detectEthereumProvider() 函数来检测用户是否已安装并激活了 Metamask。

        // 该函数返回一个提供者对象,如果用户已安装 Metamask,则提供者对象将被分配给 provider 变量。

        const provider = await detectEthereumProvider();

        if (provider) {

          // 连接到Metamask

          // 使用 ethereum.request() 函数来请求用户的帐户列表。

          // eth_requestAccounts 方法用于请求用户授权以公开其以太坊帐户地址。

          // 返回的 accounts 数组包含用户的帐户地址列表。

          const accounts = await ethereum.request({ method: 'eth_requestAccounts' });

          // 将用户的第一个帐户地址分配给 account 变量。

          const account = accounts[0];

          // 显示当前用户的地址

          // 将用户的帐户地址显示在具有 id 为 address 的 HTML 元素中。

          document.getElementById('address').textContent = account;

          console.log(account)

        } else {

          // 如果Metamask未安装,则提示用户安装Metamask

          alert('请安装Metamask');

        }

      }

    </script>

  </head>

  <body>

    <h1>My DApp</h1>

    <p>当前用户的地址:</p>

    <p id="address"></p>

    <!--创建一个按钮元素,当用户点击该按钮时,会触发名为 connect() 的函数-->

    <button οnclick="connect()">连接Metamask</button>

  </body>

</html>

  

html"><!DOCTYPE html>
<html>
  <head>
    <title>My DApp</title>
    <!--导入用于检测Metamask提供者的JavaScript库-->
    <script src="https://cdn.jsdelivr.net/npm/@metamask/detect-provider"></script>
    <script>
      //async是JavaScript中的一个关键字,用于定义一个异步函数。
      //异步函数是一种特殊类型的函数,它可以在执行期间暂停并在某个时间点后继续执行。
      //异步函数使用async关键字进行定义,并使用await关键字来暂停执行并等待异步操作完成。
      //在等待期间,JavaScript引擎可以继续执行其他代码。
      //当异步操作完成时,异步函数将恢复执行,并返回一个Promise对象,该对象包含异步操作的结果。
      async function connect() {
        // 检测Metamask是否已安装
        // 这行代码使用 detectEthereumProvider() 函数来检测用户是否已安装并激活了 Metamask。
        // 该函数返回一个提供者对象,如果用户已安装 Metamask,则提供者对象将被分配给 provider 变量。
        const provider = await detectEthereumProvider();
        if (provider) {
          // 连接到Metamask
          // 使用 ethereum.request() 函数来请求用户的帐户列表。
          // eth_requestAccounts 方法用于请求用户授权以公开其以太坊帐户地址。
          // 返回的 accounts 数组包含用户的帐户地址列表。
          const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
          // 将用户的第一个帐户地址分配给 account 变量。
          const account = accounts[0];
          // 显示当前用户的地址
          // 将用户的帐户地址显示在具有 id 为 address 的 HTML 元素中。
          document.getElementById('address').textContent = account;
          console.log(account)
        } else {
          // 如果Metamask未安装,则提示用户安装Metamask
          alert('请安装Metamask');
        }
      }
    </script>
  </head>
  <body>
    <h1>My DApp</h1>
    <p>当前用户的地址:</p>
    <p id="address"></p>
    <!--创建一个按钮元素,当用户点击该按钮时,会触发名为 connect() 的函数-->
    <button onclick="connect()">连接Metamask</button>
  </body>
</html>

执行程序 

        使用vscode的Live Server插件打开,可以参考下面的文章使用Live Server:

         1.Vue-在独立页面实现Vue的增删改查_南宫遐迩的博客-CSDN博客

        访问到网页后如果没反应,则是国内网络问题,访问不到 导入的js库,可以耐心等待或者科学上网

         

        metamask需要连接本地的ganache环境,可以参考下面这篇文章: 

        4.DApp-MetaMask怎么连接本地Ganache-CSDN博客

 展示图

后记 

        觉得有用可以点赞或收藏! 


http://www.niftyadmin.cn/n/5099077.html

相关文章

【JavaEE】Callable 接口

Callable 是一个 interface . 相当于把线程封装了一个 “返回值”. 方便程序猿借助多线程的方式计算结果. 实现Callable也是创建线程的一种方法&#xff01;&#xff01;&#xff01;&#xff01; Callable的用法非常接近于Runnable&#xff0c;Runnable描述了一个任务&#…

[机缘参悟-110] :一个IT人对面具的理解:职业面具戴久了,就会忘记原本真实的自己,一个人是忠于职位,还是忠于内心?

目录 一、职业面具戴久了&#xff0c;就会忘记原本真实的自己 二、霸王别姬 三、没有对错&#xff0c;各走各路 3.1 程蝶衣&#xff1a;戏里戏外&#xff0c;忠于角色 3.2 段小楼&#xff1a;戏里戏外&#xff0c;角色分明 3.3 没有对错&#xff0c;各走各路 四、职场中…

QT_day1

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("登录窗口");this->setWindowIcon(QIcon("C:\\Users\\EDY\\Desktop\\pictrue\\qq.png"));this->setWindowFlag(Qt::…

Python编译与反编译

py文件编译pyc 命令编译 python -m py_compile xxx.py脚本编译 import py_compilepy_compile.compile(rE:\mytest.py) #py文件完整的路径.pyc文件反编译 安装uncompyle uncompyle6 能反编译 Python3.0~Python3.8 的pyc文件 pip install uncompyle反编译文件 将xxx.pyc反…

SSM - Springboot - MyBatis-Plus 全栈体系(三十一)

第七章 MyBatis-Plus 二、MyBatis-Plus 核心功能 1. 基于 Mapper 接口 CRUD 通用 CRUD 封装 BaseMapper (opens new window)接口&#xff0c; Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器! 内部包含常见的单表操作&#xff01; 1.1 Insert 方…

通过核密度分析工具建模,基于arcgis js api 4.27 加载gp服务

一、通过arcmap10.2建模&#xff0c;其中包含三个参数 注意input属性&#xff0c;选择数据类型为要素类&#xff1a; 二、建模之后&#xff0c;加载数据&#xff0c;执行模型&#xff0c;无错误的话&#xff0c;找到执行结果&#xff0c;进行发布gp服务 注意&#xff0c;发布g…

手写一个PrattParser基本运算解析器3: 基于Swift的PrattParser的项目概述

点击查看 基于Swift的PrattParser项目 PrattParser项目概述 前段时间一直想着手恶补 编译原理 的相关知识, 一开始打算直接读大学的 编译原理, 虽然内容丰富, 但是着实抽象难懂. 无意间看到B站的熊爷关于普拉特解析器相关内容, 感觉是一个非常好的切入点.所以就写了基于Swift版…

报错解决——AttributeError: ‘OpenpyxlWriter‘ object has no attribute ‘save‘

完整报错 Traceback (most recent call last):File "track_half.py", line 249, in <module>main(opt,File "track_half.py", line 153, in mainEvaluator.save_summary(summary, os.path.join(result_root, summary_{}.xlsx.format(exp_name)))Fil…