使用 Typescript 构建一个 Web3 Chrome 扩展插件
// background.ts
import { MetamaskProvider } from './MetamaskProvider';
// 监听浏览器动作的回调函数
function onRequest(request, sender, sendResponse) {
if (request.action === 'eth_accounts') {
MetamaskProvider.handleEthAccounts(request, sender, sendResponse);
} else if (request.action === 'eth_sign') {
MetamaskProvider.handleEthSign(request, sender, sendResponse);
} else {
console.error('Unsupported request:', request);
}
return true; // 表示异步响应将被使用
}
// 注册监听器
chrome.extension.onMessage.addListener(onRequest);
// MetamaskProvider.ts
import { Runtime } from 'webextension-polyfill-ts';
export class MetamaskProvider {
static async handleEthAccounts(request: any, sender: Runtime.MessageSender, sendResponse: (response: any) => void) {
try {
const accounts = await this.getAccounts();
sendResponse(accounts);
} catch (error) {
sendResponse(error);
}
}
static async handleEthSign(request: any, sender: Runtime.MessageSender, sendResponse: (response: any) => void) {
try {
const signature = await this.signMessage(request.message);
sendResponse(signature);
} catch (error) {
sendResponse(error);
}
}
private static async getAccounts(): Promise<string[]> {
// 实现获取MetaMask账户的逻辑
// ...
return [];
}
private static async signMessage(message: string): Promise<string> {
// 实现MetaMask签名的逻辑
// ...
return '';
}
}
这个代码实例展示了如何在Typescript中创建一个简单的与MetaMask交互的Chrome扩展插件。它定义了一个监听器来监听从内容脚本发送的请求,并且使用MetamaskProvider
类来处理与MetaMask相关的eth_accounts
和eth_sign
请求。这个例子教会开发者如何在Web扩展中使用Typescript与MetaMask进行交互。
评论已关闭