Chrome扩展开发实战:快速填充表单
大家好,我是 dom 哥。我正在写关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星 。
填表单是打工人经常面对的场景,作为一个前端,我经常开发一些PC端的页面,它们主要由表单和表格构成,而输入框又是表单里最常见的表单项。
接下来就试着做一个简单的小扩展,用于快速给表单里的输入框填充值。
Mock.js
开始前请先让我介绍一下 Mock.js,这是一个模拟数据生成器,也正是这个库给了我灵感。
简而言之,Mock.js 可以生成各种各样数据类型的假数据。Chrome 扩展要做的事就是把生成的假数据插到输入框里。

新建项目
从零开始新建一个项目,暂且命名为 mock-input-demo,在项目里新建一个 manifest.json 文件,此时项目目录结构应该如下:
mock-input-demo
└── manifest.json
manifest 先简单配置一下基础字段:
{
"manifest_version": 3,
"name": "Mock Input",
"version": "0.1.0",
"description": "给表单输入框快速填充假数据"
}
打开 chrome://extensions 扩展程序页面 加载已解压的扩展程序,选中 mock-input-demo,可以看到扩展出来了

自己设计了一个简单 logo ,配置上去

+ "icons": {
+ "48": "logo48.png"
+ }
给输入框填充值的逻辑需要放在 content-script 里,新建一个 content-script.js 文件,在 manifest.json 中配置上:
+ "content-scripts": [
+ {
+ "js": ["content-script.js"],
+ "matches": ["<all_urls>"]
+ }
+ ]
此时项目的结构应该如下:
mock-input-demo
├── content-script.js
├── logo48.png
└── manifest.json
引入 Mock.js
由于项目未做工程化,所以 content-script.js 不支持 ES Modules,关于 Chrome 扩展项目的工程化,后面会单独讨论 。这里暂且先从 jsDelivr 下载一份最新的 mock.min.js 放在项目里,直接放在 content-script 里注入:
- "js": ["content-script.js"],
+ "js": [
+ "mock.min.js",
+ "content-script.js",
+ ],
mock.min.js 会暴露全局变量 Mock,在 content-script.js 可以直接使用
填充输入框
万事具备,可以编写逻辑代码啦!
简单起见,这里只考虑 input 和 textarea 两种输入框类型,以下代码实现两种场景:
- 按下 ctrl + 1-9 时填充 n 个汉字
- 按下 alt + 1-9 时填充 n 位数字
核心代码如下:
const { Random } = Mock
window.addEventListener('keypress', e => {
const { target } = e
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) {
let insert
let num
if (e.code.startsWith('Digit')) {
num = parseInt(e.code.replace('Digit', ''))
}
if (e.ctrlKey) {
if (num != null) {
insert = Random.ctitle(num)
}
} else if (e.altKey) {
if (num > 0) {
insert = Random.natural(Math.pow(10, num - 1), Math.pow(10, num) - 1)
}
}
if (insert) {
e.preventDefault()
const before = target.value.substr(0, target.selectionStart)
const after = target.value.substr(target.selectionEnd)
target.value = before + insert + after
const cursorPosition = (before + insert).length
target.setSelectionRange(cursorPosition, cursorPosition)
target.dispatchEvent(new InputEvent('input'))
}
}
})
好了,更新一下扩展,找个有输入框的页面,试试吧!

文中设计的项目源码已放在 GitHub
觉得不错可以 点个小星星 支持一下
Chrome扩展开发实战:快速填充表单的更多相关文章
- 去掉chrome记住密码后自动填充表单的黄色背景
chrome表单自动填充后,input文本框的背景会变成黄色的,通过审查元素可以看到这是由于chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性,然后对 ...
- chrome扩展开发实战入门之二-自动搜索
目标:产生随机数,用于百度搜索:像看电视一样观看搜索结果 参考上一篇,新建目录hellocrx,其中三个文件:manifest.json content_script.js 和jquery-3.4. ...
- chrome扩展开发实战入门之一-hellocrx
后记:在写这篇文章时,我还没搞懂chrome扩展的基本原理.后来才明白,最简单(且实用)的扩展只需要manifest.json和content_scripts.js两个文件,无需background. ...
- 如何修改chrome记住密码后自动填充表单的黄色背景 ?
input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { background-color: rgb(2 ...
- Flask开发系列之Web表单
Flask开发系列之Web表单 简单示例 from flask import Flask, request, render_template app = Flask(__name__) @app.ro ...
- chrome拓展开发实战:页面脚本的拦截注入
原文请访问个人博客:chrome拓展开发实战:页面脚本的拦截注入 目前公司产品的无线站点已经实现了业务平台组件化,所有业务组件的转场都是通过路由来完成,而各个模块是通过requirejs进行统一管理, ...
- chrome拓展开发实战
chrome拓展开发实战:页面脚本的拦截注入 时间 2015-07-24 11:15:00 博客园精华区 原文 http://www.cnblogs.com/horve/p/4672890.htm ...
- Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- 【转发】NPAPI学习(Firefox和Chrome扩展开发 )
NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
随机推荐
- 用OLED屏幕播放视频(3): 使用cuda编程加速视频处理
下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第3篇, 主要总结和记录了如何 ...
- @Async注解详解 以及 可能遇到的各种问题
一.简介1)在方法上使用该@Async注解,申明该方法是一个异步任务:2)在类上面使用该@Async注解,申明该类中的所有方法都是异步任务:3)方法上一旦标记了这个@Async注解,当其它线程调用这个 ...
- Linux服务器使用Redis作为数据缓存,并用log4j2进行日志记录
前言 个人网站使用Vue作为前端,SpringBoot作为后端,MySQL作为数据库,但前端每次请求都会从MySQL数据库中读取数据,而MySQL数据库的数据是存储于服务器磁盘中,所以响应速度有一定影 ...
- 用MMCls训练手势模型
import os import json import mmcv import time from mmcv import Config from mmdet.apis import inferen ...
- 我为什么要从PhoneGap中逃离? 转
我为什么要从PhoneGap中逃离? 摘要:每一位程序员都有自己的技术信仰,我也不例外.但当技术信仰遇到实际工作中的问题时,你又要怎么做呢?还记得刚刚接触HTML5做跨平台开发的时候这样的问题就摆在 ...
- Window10安装linux子系统及子系统安装1Panel面板
原文地址:Window10安装linux子系统及子系统安装1Panel面板 - Stars-One的杂货小窝 最近看到halo博客发布了2.10.0,终于是新增了个备份功能,于是有了念头想要升级下 但 ...
- [论文研读]空天地一体化(SAGIN)的网络安全_A_Survey_on_Space-Air-Ground-Sea_Integrated_Network_Security_in_6G
------------恢复内容开始------------ 空天地一体化(SAGIN)的网络安全 目前关注的方面: 集中在安全通信.入侵检测.侧通道攻击.GPS欺骗攻击.网络窃听.消息修改/注入等方 ...
- 洛谷P3612(递归)
题目描述 The cows are experimenting with secret codes, and have devised a method for creating an infinit ...
- JVM-Java语法糖与Java编译器
基本类型和其包装类型之间的自动转换,也就是自动装箱.自动拆箱,是通过加入[Wrapper].valueOf(如 Integer.valueOf)以及[Wrapper].[primitive]Value ...
- Session概述(选自WebX)
http://openwebx.org/docs/Webx3_Guide_Book.html#d0e9084 8.1. Session概述 8.1.1. 什么是Session HTTP协议是无状态的, ...