docs: 新增 Chrome Web Store 上架材料
核对表/隐私政策/商店列表材料/截图与宣传图规格 privacy.html:自包含中英双语隐私政策页面;URL-填写清单.md:主页/支持/隐私政策三处可填 URL;promo/:440x280 小促销图与 1400x560 Marquee(英文版,尺寸实测合规)
This commit is contained in:
@@ -0,0 +1,189 @@
|
|||||||
|
# Auto Login Manager — Chrome Web Store 上架材料核对表
|
||||||
|
|
||||||
|
> 适用范围:Manifest V3 扩展「Auto Login Manager」v1.0.0
|
||||||
|
> 核对依据:Chrome Web Store 官方文档(Program Policies / Privacy / Listing Requirements / Supplying Images / Publish / Register,镜像域 developer.chrome.google.cn)与仓库实际代码审查
|
||||||
|
> 生成时间:2026-09-24
|
||||||
|
> 状态图例:✔ 已就绪(随本套材料交付)|⏳ 需你在控制台/外部平台完成|– 不适用或可选
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. 一键速览(TL;DR)
|
||||||
|
|
||||||
|
| 环节 | 需要什么 | 状态 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 开发者账号 | 一次性 $5 注册费 + 开启两步验证(2FA) | ✔ 已开 2FA,已支付 $5 注册费(2026-09-24 确认) |
|
||||||
|
| 扩展包 | `auto-login-v1.0.0.zip`(≤2GB,MV3,无远程代码) | ✔ 见第 2 节 |
|
||||||
|
| 商店图标 | 128x128 PNG(图形约占 96x96,留透明边) | ✔ `icons/icon128.png`(已像素实测:图形 96x96 居中 + 四周各 16px 透明边距,合规) |
|
||||||
|
| 截图 | ≥1 张,最多 5 张,1280x800 或 640x400 | ⏳ 需你截屏(见第 4 节规格说明) |
|
||||||
|
| 促销图 | 440x280 小促销图(必填);1400x560 Marquee(可选) | ✔ `cws-store/promo/`(英文版已生成,实测尺寸精确) |
|
||||||
|
| 商店描述 | 中英双语(本扩展默认 zh_CN + en,需逐语言填写) | ✔ 见第 5 节 |
|
||||||
|
| 隐私字段 | 单一用途描述、逐权限理由、远程代码声明、数据使用申报、隐私政策 URL | ✔ 文案见第 6 节 + `cws-store/privacy.html`(URL 待 push,见 `URL-填写清单.md`) |
|
||||||
|
| 分发设置 | 地区(默认全部)、付费与否(免费)、可见范围 | ⏳ 控制台选择 |
|
||||||
|
| 提交审核 | Dashboard → Submit for Review;可选延迟发布 | ⏳ 你操作 |
|
||||||
|
|
||||||
|
**提交前仍需你完成的外部事项**:① 把 `cws-store/privacy.html` push 到远程 `master` 并确认仓库对匿名访客可读,再把 raw URL 填入隐私字段(三处 URL 可填值与前置核对详见 `URL-填写清单.md`;`218.61.196.156:41695` 已确认公网可达、仅 http);② 完成 3–5 张 1280x800 真机截图。促销图与隐私政策页面均已生成。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 开发者账号与注册
|
||||||
|
|
||||||
|
| # | 材料/要求 | 说明 | 状态 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1.1 | Google 开发者账号 | 用户已准备 | ✔ |
|
||||||
|
| 1.2 | 一次性注册费 $5 | 注册开发者账号时支付一次,非年费、非按扩展收费 | ⏳ 注册时支付 |
|
||||||
|
| 1.3 | 两步验证(2FA) | 2024 年起发布/更新扩展必须开启 Google 账号两步验证 | ⏳ 确认已开启 |
|
||||||
|
| 1.4 | 账号启用后初始发布上限 | 新账号默认最多 2 个**已发布**扩展;达到上限可在 Dashboard 申请提升 | – 首个扩展不受影响 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 扩展包(上传的 zip)
|
||||||
|
|
||||||
|
| # | 材料/要求 | 说明 | 状态 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 2.1 | 可上传的 zip 包 | `release/auto-login-v1.0.0.zip`(构建脚本只收运行时文件:manifest.json、popup.html、popup.css、icons、\_locales、dist) | ✔ 见第 7 节 |
|
||||||
|
| 2.2 | Manifest V3 | `manifest_version: 3`,service worker 后台 | ✔ |
|
||||||
|
| 2.3 | 无远程代码 | 代码审查:无 `eval`/`new Function`/动态远程脚本加载;全部逻辑随包分发 | ✔ |
|
||||||
|
| 2.4 | 权限最小化 | 5 项权限均有真实用途(见第 6.2 节逐项理由),无冗余 `tabs` 等权限 | ✔ |
|
||||||
|
| 2.5 | 无内容脚本强制注入 | manifest 无 `content_scripts` 声明;脚本仅在用户保存配置并授权站点后、或手动点击填充时按需注入(`scripting` API) | ✔ |
|
||||||
|
| 2.6 | 站点访问最小化 | 主机权限为 `optional_host_permissions: ["*://*/*"]`,安装时不申请全站访问;按域名逐一授权,拒绝授权仅影响该站自动填充,手动填充仍可用 | ✔ |
|
||||||
|
| 2.7 | 压缩包大小 | ≤2GB | ✔(实际远小于此) |
|
||||||
|
| 2.8 | 包内不加源码/测试/部署文件 | 打包脚本已排除 src、tests、scripts、updates.xml、install-policy.reg、README 等 | ✔ |
|
||||||
|
| 2.9 | zip 内路径用正斜杠、无嵌套单目录 | 打包脚本已处理 | ✔ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Store Listing(商店列表)字段
|
||||||
|
|
||||||
|
| # | 字段 | 要求/上限 | 本扩展填写 | 状态 |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| 3.1 | 扩展名称 | 控制台名称字段(建议简短,≤75 字符内) | **Auto Login Manager** | ✔ |
|
||||||
|
| 3.2 | 详细描述 | 无硬性字数上限但禁关键词堆砌(同一词反复出现 ≥5 次可能被判 spam);开头一句话说明功能 | 中英双语,见第 5 节 | ✔ |
|
||||||
|
| 3.3 | 主分类(Category) | 单选;正确分类影响搜索 | **Productivity**(生产力) | ✔ 建议 |
|
||||||
|
| 3.4 | 语言(Language) | 每支持一种 \_locales 语言可填一套描述/截图/视频 | zh-CN + en(已有 `_locales/zh_CN`、`_locales/en`) | ✔ |
|
||||||
|
| 3.5 | 商店图标 | 128x128 PNG;图形约占 96x96、四周 ≥16px 透明;浅深色背景均清晰 | `icons/icon128.png`(像素实测:图形占 96x96 居中,四周各 16px 透明边距,完全符合要求,无需重制;icon16/icon48 为运行时工具栏/菜单图标,非商店图表,满布属正常,不受此规则约束) | ✔ |
|
||||||
|
| 3.6 | 截图 | **至少 1 张**,最多 5 张;1280x800 或 640x400;直角无边框(full bleed) | 待截屏(规格见第 4 节) | ⏳ |
|
||||||
|
| 3.7 | 小促销图 Small promo tile | **440x280 PNG/JPEG,必填**;少图/缺图会排在带图扩展之后 | `cws-store/promo/promo-440x280.png`(英文版,已按规格生成、实测尺寸精确) | ✔ |
|
||||||
|
| 3.8 | 大促销图 Marquee promo tile | 1400x560 PNG/JPEG,可选;提供才可能上首页推荐位 | `cws-store/promo/promo-1400x560.png`(英文版,已按规格生成、实测尺寸精确) | ✔ |
|
||||||
|
| 3.9 | 宣传视频 YouTube 链接 | 官方列表页提及;Supplying Images 页确认非强制 | 可不提供 | – 可选 |
|
||||||
|
| 3.10 | 主页 URL(Official URL / Homepage) | 展示在详情页;验证归属后可显示"已验证发布者"角标 | **`http://218.61.196.156:41695/Chrome-extension/auto-login`**(Gitea 仓库 Web 首页,已确认公网可达) | ✔ |
|
||||||
|
| 3.11 | 支持 URL(Support URL) | 用户帮助/反馈入口 | **`http://218.61.196.156:41695/Chrome-extension/auto-login`**(Gitea 仓库页,含 Issues 入口) | ✔ |
|
||||||
|
| 3.12 | 内容分级(Mature content) | 默认不勾选;本扩展无成人内容 | 不勾选 | ✔ |
|
||||||
|
| 3.13 | 多语言一致性 | 各语言描述不能显著改变功能描述(控制台自动比对,warning 可忽略但建议一致) | 中英文案已对齐口径 | ✔ |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 图片规格速查(详细指引见配套文档「截图与宣传图规格说明」)
|
||||||
|
|
||||||
|
| 图片 | 尺寸 | 格式 | 必填 | 要点 |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| 商店图标 | 128x128 | PNG | ✔ | 图形占 96x96 中心,四周透明边;无描边;浅深色背景都清晰 |
|
||||||
|
| 截图 | 1280x800(首选)或 640x400 | PNG/JPEG | ✔ ≥1,最多 5 | 直角、无圆角/无边框/无 padding;展示真实界面;数字不小(下采样到 640x400 展示) |
|
||||||
|
| 小促销图 | 440x280 | PNG/JPEG | ✔ | 少用文字;半尺寸仍可读;深饱和色;填满整幅 |
|
||||||
|
| Marquee 促销图 | 1400x560 | PNG/JPEG | 可选 | 同上 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 商店列表文案(可直接粘贴)
|
||||||
|
|
||||||
|
详见配套文档「商店列表材料(中英双语)」:名称、一句话简介、详细描述、分类建议与语言配置。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 隐私字段(Privacy tab)—— 已按真实行为起草
|
||||||
|
|
||||||
|
### 6.1 单一用途描述(Single purpose description)
|
||||||
|
|
||||||
|
> **One-line purpose**:Auto-fill login credentials for websites you configure, keeping all data encrypted and stored locally on your device.
|
||||||
|
> **中文口径**:针对你配置的网站自动填充登录用户名和密码,所有数据经本地加密后仅保存在你设备上。
|
||||||
|
|
||||||
|
### 6.2 权限理由(Permission justifications,逐权限)
|
||||||
|
|
||||||
|
| 权限 | 真实用途(代码依据) |
|
||||||
|
| --- | --- |
|
||||||
|
| `storage` | 保存配置与解锁期间的会话数据(`chrome.storage.local` 密文 / `session` 明文仅内存) |
|
||||||
|
| `activeTab` | 点击扩展图标时临时访问当前标签页,用于「填入当前域名」「在当前页面填充」 |
|
||||||
|
| `scripting` | 按需向已授权网站注入填充脚本(无 manifest 级强制注入) |
|
||||||
|
| `sidePanel` | 展示扩展侧边栏界面 |
|
||||||
|
| `bookmarks` | 仅当你点击「从书签导入」时读取书签(`bookmark-import.ts` 调用 `chrome.bookmarks.getTree()`)批量生成域名配置 |
|
||||||
|
|
||||||
|
未申请 `tabs`、`webRequest`、`history` 等无关权限。
|
||||||
|
|
||||||
|
### 6.3 远程代码声明(Remote code)
|
||||||
|
|
||||||
|
- 勾选 **No**:扩展不含、也不执行远程代码;全部逻辑打包在 zip 内。
|
||||||
|
|
||||||
|
### 6.4 数据使用申报(Data usage / Data safety)
|
||||||
|
|
||||||
|
| 申报项 | 如实填写 |
|
||||||
|
| --- | --- |
|
||||||
|
| 是否收集/传输用户数据 | 收集(仅用户主动录入的凭据与域名配置),**不传输** |
|
||||||
|
| 收集的数据类型 | Passwords(密码)、Personal info – User IDs(用户名)、域名配置(用户提供,录入时产生) |
|
||||||
|
| 数据用途 | 核心功能:登录表单自动填充(单一用途) |
|
||||||
|
| 是否与第三方共享 | 否 |
|
||||||
|
| 是否出售数据 | 否 |
|
||||||
|
| 是否用于广告/分析 | 否 |
|
||||||
|
| 采集是否可选/可删 | 是;删除条目或卸载扩展即清除 |
|
||||||
|
| 加密 | 传输不适用(零网络请求);存储:主口令 PBKDF2-SHA256(20 万次迭代)派生 AES-GCM-256 密钥,密钥不可导出(`extractable: false`) |
|
||||||
|
|
||||||
|
> 注意:公开向 Google 申报的口径与「隐私政策」「商店描述」必须一致(Listing Requirements 明确要求三者一致)。
|
||||||
|
|
||||||
|
### 6.5 隐私政策 URL(Privacy policy)
|
||||||
|
|
||||||
|
- 官方要求:处理任何用户数据的扩展必须在 Dashboard 提供**准确、最新**的隐私政策 URL;无需隐私政策时也须说明。
|
||||||
|
- 本扩展收集密码,**必须提供隐私政策 URL**。
|
||||||
|
- ✅ **隐私政策页面已备好**:`cws-store/privacy.html`(自包含、中英双语、联系邮箱已填、内嵌样式无外部依赖,已确认 `218.61.196.156:41695` 公网可达、仅 http)。
|
||||||
|
- ⏳ **待你完成**:把 `cws-store/privacy.html` **提交并 push** 到远程 `master` 分支,确认仓库对匿名访客可读后,在 Privacy tab 填入 raw URL:
|
||||||
|
`http://218.61.196.156:41695/Chrome-extension/auto-login/raw/branch/master/cws-store/privacy.html`
|
||||||
|
(三处 URL 可填值与前置核对详见 `URL-填写清单.md`)
|
||||||
|
- 托管后维护义务:政策实质变更时更新页面与官方要求的显著披露。
|
||||||
|
|
||||||
|
### 6.6 需要"显著披露"的更新(2026-08-01 起执行的政策)
|
||||||
|
|
||||||
|
2026 年 7 月 1 日官方发布、8 月 1 日生效的政策更新要点,已逐条核对:
|
||||||
|
|
||||||
|
| 政策要点 | 本扩展符合情况 |
|
||||||
|
| --- | --- |
|
||||||
|
| 收集的数据严格限于披露的单一用途(Limited Use) | ✔ 仅用于自动填充 |
|
||||||
|
| 所有数据收集须显著披露给用户 | ✔ 隐私政策 + 设置页"本机密码仅用于本地加密,不会上传到任何服务器"提示 |
|
||||||
|
| 数据处理方式变更须主动披露 | ✔ 政策文档含变更说明条款(见 PRIVACY.md 第 7 节),后续若变更加版本并更新政策 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 打包与构建
|
||||||
|
|
||||||
|
| # | 项 | 说明 | 状态 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 7.1 | 版本号 | manifest/package.json 版本一致:1.0.0 | ✔ |
|
||||||
|
| 7.2 | 构建命令 | `npm run build`(release 模式) | ✔ 由打包脚本自动执行 |
|
||||||
|
| 7.3 | zip 生成 | `node scripts/package.mjs` → `release/auto-login-v1.0.0.zip` | ✔ 见第 8 节 |
|
||||||
|
| 7.4 | 后续版本迭代 | `npm run release -- patch/minor/major` 同时同步 manifest/package.json/updates.xml | ✔ 既有脚本 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 发布流程(首次上架操作顺序)
|
||||||
|
|
||||||
|
1. 打开 [Chrome Web Store Developer Dashboard](https://chrome.google.com/webstore/devconsole),用开发者账号登录(已开 2FA)。
|
||||||
|
2. **Add new item**(新增商品)→ Choose file → 选择 `release/auto-login-v1.0.0.zip` → Upload。
|
||||||
|
3. 左侧菜单逐项填写:
|
||||||
|
- **Package**:只读,显示上传包信息(zip 有效则正常)。
|
||||||
|
- **Store Listing**:按第 3、5 节填写;上传图标、截图、促销图;选择语言为 zh-CN 与 en 并分别填描述。
|
||||||
|
- **Privacy**:按第 6 节填写单一用途、权限理由、远程代码=No、数据申报、粘贴隐私政策 URL。
|
||||||
|
- **Distribution**:免费(Free);地区默认全部或按需选择;可见范围选择 Public。
|
||||||
|
- **Test instructions**:如需可填写测试说明(安装后打开侧边栏设置密码→添加配置→授权站点→刷新目标页观察自动填充);密码管理类扩展建议填写以加速审核。
|
||||||
|
4. 点击 **Submit for Review**(提交审核);如不想审核一过立即可见,可在确认弹窗取消"审核通过后自动发布",稍后手动发布。
|
||||||
|
5. 审核通过后有 **30 天** 发布窗口,超时退回草稿需重新提交;审核时长不定(多数 1 天~数天),可在 Dashboard 查看状态并开启邮件通知。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 待你完成的清单(最终行动项)
|
||||||
|
|
||||||
|
- [x] 已确认开发者账号开启两步验证(2FA)并支付 $5 一次性注册费(2026-09-24)
|
||||||
|
- [ ] 将 `cws-store/privacy.html` 提交并 push 到远程 `master`,确认仓库匿名可读后,在 Privacy tab 填入 raw URL(见 `URL-填写清单.md`;已确认 `218.61.196.156:41695` 公网可达、仅 http)
|
||||||
|
- [ ] 按规格截 3–5 张 1280x800 截图
|
||||||
|
- [x] 制作 440x280 小促销图(必填)+ 1400x560 Marquee(可选)→ 已生成 `cws-store/promo/`(英文版;如需中文版可据 `promo_*.html` 改文案重导出)
|
||||||
|
- [x] 复核/重制 128x128 商店图标(已像素实测:`icon128.png` 图形 96x96 居中、四周各 16px 透明边距,合规无需重制)
|
||||||
|
- [ ] 在 Dashboard 上传 zip → 填写 Store Listing(主页/支持 URL 已备好) / Privacy / Distribution → Submit for Review
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*核对表依据官方文档:Program Policies(含 2026-08-01 生效的 Limited Use 数据政策)、Privacy & data safety、Listing requirements、CWS dashboard listing、Supplying Images、Publish、Register。*
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
# 隐私政策 / Privacy Policy — Auto Login Manager
|
||||||
|
|
||||||
|
**扩展名称**:Auto Login Manager
|
||||||
|
**版本**:1.0.0
|
||||||
|
**生效日期**:2026-09-24
|
||||||
|
**政策最后更新**:2026-09-24
|
||||||
|
|
||||||
|
> 本文档用于 Chrome Web Store 上架隐私申报,与扩展仓库内 `PRIVACY.md` 口径一致。
|
||||||
|
> 联系方式已填写(见下方「8. 联系方式」)。发布前请将本政策正文托管到公网 URL(GitHub Pages / Gitee Pages / 自有站点均可),再把该 URL 填入 Developer Dashboard 的 Privacy 字段。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 目录
|
||||||
|
|
||||||
|
- [中文](#中文)
|
||||||
|
- [English](#english)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 中文
|
||||||
|
|
||||||
|
### 一句话说明
|
||||||
|
|
||||||
|
本扩展(Auto Login Manager)是一个浏览器端自动填充工具:你为特定网站保存登录配置(域名、用户名、密码),本扩展在你访问已授权网站时自动填充登录表单。**所有凭据仅在设置本机口令后以 AES-GCM-256 密文保存在你自己的浏览器本机;本扩展不包含任何网络请求代码,不将任何数据上传到任何服务器。**
|
||||||
|
|
||||||
|
### 1. 我们收集哪些数据
|
||||||
|
|
||||||
|
**我们只处理你主动录入的数据,并且这些数据不会离开你的设备。**
|
||||||
|
|
||||||
|
| 数据类型 | 是否收集 | 来源 | 用途 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 登录配置(域名/URL 匹配规则、用户名、密码、别名) | 是 | 你在扩展侧边栏手动录入,或通过「从书签导入」批量生成 | 核心功能:自动填充登录表单(单一用途) |
|
||||||
|
| 环境信息(环境名称、环境内配置分组) | 是 | 你创建环境时录入 | 多环境配置管理 |
|
||||||
|
| 设置项(自动提交、填充延迟、选择器、启用状态) | 是 | 你配置时录入 | 控制填充行为 |
|
||||||
|
| 自动提交失败计数 | 是 | 扩展运行产生 | 防止账号因连续自动提交被锁定(纯本地计数) |
|
||||||
|
| 浏览器书签 | 是(仅点击「从书签导入」时) | Chrome 书签 API | 仅在你主动触发时读取书签生成域名配置 |
|
||||||
|
|
||||||
|
**明确不收集**:
|
||||||
|
|
||||||
|
- 无网络请求:本扩展不含任何向外部服务器发送数据的代码(经代码审查确认,无 `fetch` / `XMLHttpRequest` / `WebSocket` / `sendBeacon` 调用)
|
||||||
|
- 无统计分析、无崩溃上报、无广告、无第三方 SDK
|
||||||
|
- 不读取浏览历史(未申请 `tabs` 权限;仅在你点击扩展图标时经 `activeTab` 临时访问当前标签页)
|
||||||
|
- 不收集设备标识、位置、联系人、支付信息
|
||||||
|
|
||||||
|
### 2. 数据保存在哪里
|
||||||
|
|
||||||
|
| 数据 | 位置 | 说明 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 域名配置、用户名、密码、环境信息 | `chrome.storage.local` | 设置本机口令后以 **AES-GCM-256 密文**保存 |
|
||||||
|
| 解锁期间的明文配置 | `chrome.storage.session` | 仅内存,浏览器关闭即清除;10 分钟无操作自动锁定 |
|
||||||
|
| 加密密钥句柄 | 扩展专属 IndexedDB | 存的是**不可导出**的密钥对象(`extractable: false`),无法读出原始密钥字节 |
|
||||||
|
| 登录失败计数 | `chrome.storage.local` | 非敏感,仅用于失败次数限制 |
|
||||||
|
|
||||||
|
主口令本身**不会被保存**到任何存储位置。它仅用于派生加密密钥,解锁后只保留派生结果。
|
||||||
|
|
||||||
|
### 3. 加密方式
|
||||||
|
|
||||||
|
- 密钥派生:PBKDF2-SHA256 + 随机盐(本机口令 **200,000** 次迭代;导出文件口令 100,000 次迭代)
|
||||||
|
- 数据加密:AES-GCM-256(带完整性校验的认证加密)
|
||||||
|
- 密钥属性:不可导出(`exportKey()` 按设计失败),只能用于加解密
|
||||||
|
|
||||||
|
如果你忘记本机口令,**数据无法恢复**,这是加密设计的必然结果。
|
||||||
|
|
||||||
|
### 4. 权限用途(与清单权限逐项对应)
|
||||||
|
|
||||||
|
本扩展在 `manifest.json` 中声明以下权限,每一项都有真实用途:
|
||||||
|
|
||||||
|
| 权限 | 用途 |
|
||||||
|
| --- | --- |
|
||||||
|
| `storage` | 保存加密配置(`storage.local`)与解锁期间的会话数据(`storage.session`) |
|
||||||
|
| `activeTab` | 你点击扩展图标时**临时**访问当前标签页,用于「在当前页面填充」与「填入当前域名」 |
|
||||||
|
| `scripting` | 在需要时按需注入填充脚本 |
|
||||||
|
| `sidePanel` | 显示扩展侧边栏界面 |
|
||||||
|
| `bookmarks` | 仅当你点击「从书签导入」时读取书签,用于批量生成域名配置 |
|
||||||
|
|
||||||
|
**网站访问权限采取最小化设计**:本扩展未在安装时申请任何全站访问权限(manifest 仅含 `optional_host_permissions: ["*://*/*"]`)。只有在你保存某个域名配置时,才会询问一次「是否允许访问该网站」;**未授权的网站不会执行任何本扩展脚本**。你可以随时在 `chrome://extensions` 中撤销授权,撤销后该网站不再自动填充(手动填充仍可用)。
|
||||||
|
|
||||||
|
**无强制内容注入**:本扩展的 manifest 中不包含 `content_scripts` 声明,不会在你未授权的情况下自动向任何网页注入脚本;填充脚本仅在已授权网站或你手动触发时按需注入。
|
||||||
|
|
||||||
|
### 5. 数据的导出与删除
|
||||||
|
|
||||||
|
- **导出**:由你主动触发,导出的文件保存在你指定的位置,可选择用文件口令加密后导出
|
||||||
|
- **删除单条配置**:在侧边栏中删除即可
|
||||||
|
- **删除全部数据**:卸载本扩展,或清除该扩展的存储数据(`chrome://extensions` → 扩展详情 → 清除数据)
|
||||||
|
|
||||||
|
### 6. 第三方共享
|
||||||
|
|
||||||
|
不存在。本扩展不与任何第三方共享数据,因为它不向外传输数据;不涉及数据出售、广告、跨站追踪。
|
||||||
|
|
||||||
|
### 7. 政策变更
|
||||||
|
|
||||||
|
若本政策发生实质性变更,将更新本文件顶部的「政策最后更新」日期,并随扩展版本更新一并发布;涉及数据处理方式变更时,将按 Chrome Web Store 政策要求主动进行显著披露。
|
||||||
|
|
||||||
|
### 8. 联系方式
|
||||||
|
|
||||||
|
- 支持 / 反馈:**chenxuanvictory@163.com**
|
||||||
|
- 项目主页:**http://218.61.196.156:41695/Chrome-extension/auto-login.git**
|
||||||
|
|
||||||
|
如有隐私相关问题,也可通过上述渠道联系我们,我们会在合理时间内回复。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## English
|
||||||
|
|
||||||
|
### Summary
|
||||||
|
|
||||||
|
Auto Login Manager is a browser-side auto-fill tool. You save login entries (domain, username, password) for websites you choose; the extension auto-fills the login form when you visit an authorized site. **All credentials are stored on your own machine, encrypted with AES-GCM-256 after you set a local master password. The extension contains no networking code and transmits nothing anywhere.**
|
||||||
|
|
||||||
|
### 1. Data We Collect
|
||||||
|
|
||||||
|
**We only handle data you enter yourself, and it never leaves your device.**
|
||||||
|
|
||||||
|
| Data type | Collected | Source | Purpose |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Login entries (domain / URL match rules, username, password, alias) | Yes | You type them into the side panel, or generate them in bulk via "import from bookmarks" | Core function: auto-fill login forms (single purpose) |
|
||||||
|
| Environment info (environment names and config groups) | Yes | You create environments in the UI | Multi-environment config management |
|
||||||
|
| Settings (auto-submit, fill delay, selectors, enabled state) | Yes | You configure them | Control fill behavior |
|
||||||
|
| Auto-submit failure counters | Yes | Generated by the extension at runtime | Prevents account lockout from repeated auto-submits (local counter only) |
|
||||||
|
| Browser bookmarks | Yes (only when you click "import from bookmarks") | Chrome bookmarks API | Read bookmarks only when you explicitly trigger the import |
|
||||||
|
|
||||||
|
**Explicitly not collected**:
|
||||||
|
|
||||||
|
- No network requests: the extension contains no code that sends data to any server (verified by code review: no `fetch` / `XMLHttpRequest` / `WebSocket` / `sendBeacon` calls)
|
||||||
|
- No analytics, no crash reporting, no ads, no third-party SDKs
|
||||||
|
- No browsing history (the `tabs` permission is not requested; the active tab is accessed temporarily via `activeTab` only when you click the extension icon)
|
||||||
|
- No device identifiers, location, contacts, or payment information
|
||||||
|
|
||||||
|
### 2. Where Data Is Stored
|
||||||
|
|
||||||
|
| Data | Location | Notes |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Domain configs, usernames, passwords, environments | `chrome.storage.local` | Stored as **AES-GCM-256 ciphertext** once a master password is set |
|
||||||
|
| Decrypted configs while unlocked | `chrome.storage.session` | In-memory only; cleared when the browser closes; auto-locks after 10 minutes of inactivity |
|
||||||
|
| Encryption key handle | Extension-owned IndexedDB | A **non-extractable** key object; raw key bytes cannot be read out |
|
||||||
|
| Login failure counters | `chrome.storage.local` | Non-sensitive; used only to throttle repeated auto-submits |
|
||||||
|
|
||||||
|
The master password itself is **never written to any storage**. It is only used to derive the encryption key.
|
||||||
|
|
||||||
|
### 3. Encryption
|
||||||
|
|
||||||
|
- Key derivation: PBKDF2-SHA256 with a random salt (200,000 iterations for the master password; 100,000 for exported file passwords)
|
||||||
|
- Data encryption: AES-GCM-256 (authenticated encryption with integrity checks)
|
||||||
|
- Key property: non-extractable — `exportKey()` fails by design
|
||||||
|
|
||||||
|
If you forget your master password, the data **cannot be recovered**. That is an inherent property of the encryption design.
|
||||||
|
|
||||||
|
### 4. Permissions (mapped 1:1 to the declared permissions)
|
||||||
|
|
||||||
|
| Permission | Purpose |
|
||||||
|
| --- | --- |
|
||||||
|
| `storage` | Save encrypted configs (`storage.local`) and unlocked session data (`storage.session`) |
|
||||||
|
| `activeTab` | **Temporary** access to the active tab when you click the extension icon, for "fill current page" and "fill current domain" |
|
||||||
|
| `scripting` | Inject the fill script on demand |
|
||||||
|
| `sidePanel` | Render the side panel UI |
|
||||||
|
| `bookmarks` | Read bookmarks only when you click "import from bookmarks", to generate domain configs in bulk |
|
||||||
|
|
||||||
|
**Site access is minimal by design**: the extension does not request any install-time access to all websites (the manifest only declares `optional_host_permissions: ["*://*/*"]`). You are asked once, when you save a config for a domain, whether to allow access to that site. **No extension script runs on sites you have not authorized.** You can revoke grants at any time from `chrome://extensions`; revoked sites simply stop auto-filling (manual fill still works).
|
||||||
|
|
||||||
|
**No forced content injection**: the manifest declares no `content_scripts`. The extension never injects scripts into any page without your authorization; fill scripts are injected on demand only on authorized sites or when you trigger fill manually.
|
||||||
|
|
||||||
|
### 5. Export and Deletion
|
||||||
|
|
||||||
|
- Export is always user-initiated; optional file-password encryption is available
|
||||||
|
- Delete individual entries in the side panel
|
||||||
|
- Delete everything by uninstalling the extension or clearing its storage data
|
||||||
|
|
||||||
|
### 6. Third Parties
|
||||||
|
|
||||||
|
None. The extension does not share data with any third party because it does not transmit data anywhere; no data selling, no ads, no cross-site tracking.
|
||||||
|
|
||||||
|
### 7. Policy Changes
|
||||||
|
|
||||||
|
Material changes will be reflected in the "Last updated" date at the top of this document and shipped with a new extension version. Changes to data handling practices will be proactively disclosed as required by Chrome Web Store policy.
|
||||||
|
|
||||||
|
### 8. Contact
|
||||||
|
|
||||||
|
- Support / feedback: **chenxuanvictory@163.com**
|
||||||
|
- Project home: **http://218.61.196.156:41695/Chrome-extension/auto-login.git**
|
||||||
|
|
||||||
|
For privacy-related questions, please contact us through the channels above; we will respond within a reasonable timeframe.
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
# Auto Login Manager — Chrome Web Store 商店列表材料(中英双语)
|
||||||
|
|
||||||
|
> 用途:本文件提供 Developer Dashboard「Store Listing」标签页所需的全部文案与配置建议,可直接复制粘贴。
|
||||||
|
> 依据:扩展真实行为(manifest 权限、本地加密实现、无网络请求、按需注入),避免任何夸大或关键词堆砌。
|
||||||
|
> 生成时间:2026-09-24
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、基础信息(通用字段)
|
||||||
|
|
||||||
|
| 字段 | 填写值 | 说明 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| 扩展名称(Name) | **Auto Login Manager** | 建议保持与 manifest 品牌一致;商店与清单名称统一 |
|
||||||
|
| 分类(Category) | **Productivity**(生产力) | 在控制台选项中选择 Productivity |
|
||||||
|
| 语言(Language) | **zh-CN** 与 **en** | 扩展含 `_locales/zh_CN`、`_locales/en`,两种语言均可提供本地化描述;控制台逐语言录入 |
|
||||||
|
| 主页 URL(Homepage) | **http://218.61.196.156:41695/Chrome-extension/auto-login** | Gitea 仓库 Web 首页(公网可达);若希望公网用户可访问更美观的页面,可后续改为公开站点 |
|
||||||
|
| 支持 URL(Support URL) | **http://218.61.196.156:41695/Chrome-extension/auto-login** | 用户反馈入口(Gitea 仓库页,含 Issues 入口) |
|
||||||
|
| 内容分级 | 不勾选 Mature | 无成人/敏感内容 |
|
||||||
|
|
||||||
|
> 说明:控制台每种语言下可分别填写一套「详细描述 + 截图 + 视频」;小促销图与 Marquee 图不支持本地化,只传一次。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、英语(en)
|
||||||
|
|
||||||
|
### 2.1 详细描述(Detailed Description — English)
|
||||||
|
|
||||||
|
> 建议:先放 1 句核心功能说明,再展开细节;避免同一关键词重复超过 5 次(官方反关键词堆砌要求)。
|
||||||
|
|
||||||
|
**Draft (English description):**
|
||||||
|
|
||||||
|
```
|
||||||
|
Auto Login Manager fills the username and password on websites you have configured, so you
|
||||||
|
can stay signed in without retyping credentials. Works from a side panel alongside the page.
|
||||||
|
|
||||||
|
Privacy first: everything is stored on your device, encrypted locally. The extension makes
|
||||||
|
no network requests, sends no data to any server, and uses no analytics or third-party SDKs.
|
||||||
|
|
||||||
|
Core features
|
||||||
|
|
||||||
|
- Domain rules: exact domains, wildcards (*.example.com), and path rules (oa.com/login/*)
|
||||||
|
- Multiple environments: keep separate accounts for personal, test, and production sites;
|
||||||
|
pick the right one when several match
|
||||||
|
- Auto-fill with optional auto-submit: fill username and password, then optionally click
|
||||||
|
the login button for you
|
||||||
|
- On-demand injection only: no scripts run on sites you have not configured and authorized;
|
||||||
|
granting site access is a one-time per-domain prompt you can revoke anytime
|
||||||
|
- Advanced form detection: CSS selectors, keyword heuristics, Shadow DOM, and login forms
|
||||||
|
inside iframes (SSO pages) are supported
|
||||||
|
- SPA friendly: retries for up to 30 seconds while the page renders the form late, with
|
||||||
|
exponential backoff and graceful shutdown when the DOM stops changing
|
||||||
|
- Captcha awareness: when a CAPTCHA / slider is detected, it fills the credentials but
|
||||||
|
never auto-submits; you complete the challenge and click login
|
||||||
|
- Safety guard: after 3 consecutive auto-submits on the same domain it pauses auto-submit
|
||||||
|
(still fills) for 5 minutes to protect your account, and resets once login succeeds
|
||||||
|
- Local encryption: PBKDF2-SHA256 (200,000 iterations) derives an AES-GCM-256 key; the key
|
||||||
|
is non-extractable and the master password is never written to disk
|
||||||
|
- Auto-lock: after 10 minutes of inactivity the vault locks; decrypted data lives only in
|
||||||
|
memory (session storage) and is cleared when the browser closes
|
||||||
|
- Bookmarks import: generate domain configs in bulk from your bookmarks
|
||||||
|
- Bilingual UI: English and 简体中文
|
||||||
|
|
||||||
|
Manual filling is available on any page you open, even without granting site access
|
||||||
|
(activeTab permission), making it useful on the spot.
|
||||||
|
```
|
||||||
|
|
||||||
|
> 可省略「隐私/加密」整段以缩短篇幅;若保留,请与隐私政策、Data safety 申报保持完全一致。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、中文(zh-CN)
|
||||||
|
|
||||||
|
### 3.1 详细描述(Detailed Description — 简体中文)
|
||||||
|
|
||||||
|
**文案草稿(中文描述):**
|
||||||
|
|
||||||
|
```
|
||||||
|
Auto Login Manager 能为你配置过的网站自动填写用户名和密码,从此不用每次重新输入账号信息。
|
||||||
|
通过侧边栏即可与网页并排使用,添加配置、管理账号、一键填充。
|
||||||
|
|
||||||
|
隐私优先:所有数据仅保存在本机并做本地加密。扩展没有任何网络请求代码,不会向任何服务器
|
||||||
|
发送数据,无统计、无广告、无第三方 SDK。
|
||||||
|
|
||||||
|
核心功能
|
||||||
|
|
||||||
|
- 域名规则:支持精确域名、通配符(*.example.com)、路径规则(oa.com/login/*)
|
||||||
|
- 多环境隔离:个人、测试、生产等环境分别保存账号,命中多条配置时弹出选择
|
||||||
|
- 自动填充 + 可选自动提交:填入用户名密码后,可选择是否替你点击登录按钮
|
||||||
|
- 按需注入:未配置且未授权的网站不会执行任何扩展脚本;站点授权按域名逐一询问,
|
||||||
|
可随时在 chrome://extensions 撤销
|
||||||
|
- 表单识别能力强:支持 CSS 选择器、关键词启发式、Shadow DOM 组件、iframe 内嵌登录框(SSO)
|
||||||
|
- 适配 SPA 页面:表单晚渲染时最长重试 30 秒,带退避与空转保护,不影响大页面性能
|
||||||
|
- 验证码感知:检测到验证码/滑块时只填充、不自动提交,由你完成验证后点击登录
|
||||||
|
- 账号保护:同一域名连续自动提交 3 次后暂停自动提交 5 分钟(仍会填充),
|
||||||
|
检测到登录成功自动清零计数
|
||||||
|
- 本地加密:PBKDF2-SHA256(20 万次迭代)派生 AES-GCM-256 密钥;密钥不可导出,
|
||||||
|
主口令不写入任何存储
|
||||||
|
- 自动锁定:10 分钟无操作自动锁定;解密数据只存在于内存(session 存储),关浏览器即清除
|
||||||
|
- 书签导入:从浏览器书签批量生成域名配置
|
||||||
|
- 中英双语界面
|
||||||
|
|
||||||
|
即使未授权站点,打开网页后也能用手动填充(基于 activeTab 临时权限),随开随用。
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、扩展短描述(用于 manifest / 商店侧栏展示)
|
||||||
|
|
||||||
|
商店列表中的「简短描述」取自 `manifest.json` 的 `description`(`__MSG_extDescription__`),当前已是双语:
|
||||||
|
|
||||||
|
- **zh-CN**:针对特定域名自动填充用户名密码并完成登录,支持界面管理域名配置
|
||||||
|
- **en**:Auto-fill username and password for specific domains and complete login. Supports managing domain configurations via UI.
|
||||||
|
|
||||||
|
可直接沿用;如需更营销化的短描述,候选(en / zh):
|
||||||
|
|
||||||
|
| 语言 | 候选短描述 | 建议 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| en | Fill credentials automatically, keep them encrypted on your device | 更口语、突出隐私卖点 |
|
||||||
|
| en | Log in faster — auto-fill stored credentials for the domains you choose | 突出效率 |
|
||||||
|
| zh-CN | 为指定网站自动填入账号密码,凭据本地加密,不上传任何服务器 | 突出隐私 |
|
||||||
|
| zh-CN | 登录提速:为你配置的网站自动填写用户名密码并完成登录 | 突出效率 |
|
||||||
|
|
||||||
|
> 注意:修改 `_locales/*/messages.json` 的 `extDescription` 会影响 manifest 描述,需随扩展包重新构建(npm run build + package);若仅改商店列表描述,则直接在控制台 Store Listing 中填写即可,无需动包。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、提交质量控制(提交前自查)
|
||||||
|
|
||||||
|
- [ ] 详细描述以一句话点明功能开头(官方推荐)
|
||||||
|
- [ ] 中英文案口径一致(功能集合不变,避免控制台跨语言一致性告警)
|
||||||
|
- [ ] 未使用关键词堆砌(同一词语句中被连续/过度重复)
|
||||||
|
- [ ] 描述、隐私政策、Data safety 申报三者对「收集什么、存哪里、是否上传」的表述一致
|
||||||
|
- [ ] 未宣称「极速/100% 安全」等绝对化或无法证明的措辞(避免审核驳回)
|
||||||
|
- [ ] 已填写主页/支持 URL(建议为公开仓库页,便于审核人员核验与用户反馈)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*配套文件:01-上架材料核对表.md(所有字段来源与核对项)、02-隐私政策-Privacy-Policy.md、03-截图与宣传图规格说明.md。*
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
# Auto Login Manager — 商店截图与宣传图规格及截屏指引
|
||||||
|
|
||||||
|
> 用途:按官方规格准备 Chrome Web Store 展示素材(截图、小促销图、Marquee、商店图标)。
|
||||||
|
> 官方要求(2026 生效口径):截图必须真实反映扩展功能;禁止使用带边框/圆角/阴影(全出血直角铺满);禁止堆叠多张截图拼图。
|
||||||
|
> 生成时间:2026-09-24
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、规格速查表
|
||||||
|
|
||||||
|
| 素材 | 尺寸 | 格式 | 数量 | 是否必填 | 备注 |
|
||||||
|
| --- | --- | --- | --- | --- | --- |
|
||||||
|
| 商店截图(Screenshot) | 1280x800 或 640x400 | PNG/JPEG | 至少 1,建议 3–5 | 必填 | 横向;直角全出血(无圆角/边框/阴影),图片内容铺满整张 |
|
||||||
|
| 小促销图(Small Promo Tile) | 440x280 | PNG | 1 | 必填 | 商店首页/搜索展示;文字尽量少,不能被裁切 |
|
||||||
|
| Marquee 促销图 | 1400x560 | PNG | 1 | 可选 | 商店精选位展示;建议电商/商店背景留白充足 |
|
||||||
|
| 商店图标(Icon) | 128x128 | PNG | 1 | 必填 | 图形约占中心 96x96,四周留 ≥16px 透明边距(Chrome 会裁圆角/内缩,四周贴边会显示不全) |
|
||||||
|
| 宣传视频(Promo Video) | 1280x720 | 不限(托管于 YouTube) | 1 | 可选 | 仅当 Store Listing 选择语言含 en 时需提供;zh-CN 不支持 |
|
||||||
|
|
||||||
|
> 提示:截图上传 1280x800 即可(高分屏展示清晰);务必以**实际运行画面**为准,不得伪造不存在的界面或夸大功能效果。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、商店截图内容建议(针对本扩展)
|
||||||
|
|
||||||
|
按照「第一屏讲清楚是什么 → 中间屏展示关键功能 → 最后屏讲隐私/多环境」的叙事顺序,建议 4–5 张:
|
||||||
|
|
||||||
|
| # | 场景 | 操作步骤 | 画面要点 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 1 | 主界面总览 | 打开任意网页(如 example.com 登录页),点击扩展图标从侧边栏打开面板 | 侧边栏「域名列表 + 配置入口」与网页并排同屏;体现「与页面同屏使用」的卖点 |
|
||||||
|
| 2 | 添加域名配置 | 在面板中点击「添加域名」,展开表单填写规则(如 `*.example.com`、用户名、密码、是否自动提交) | 表单 + 规则类型切换可见;展示精确/通配符/路径的多选能力 |
|
||||||
|
| 3 | 自动填充效果 | 打开已配置域名的登录页,点击面板「填充」按钮或自动填充 | 用户名/密码框已被填入;若同时展示自动提交,需在描述中说明做了自动提交 |
|
||||||
|
| 4 | 多环境账号选择 | 配置同域多环境(个人/测试/生产)后再次访问 | 命中多条配置时的「选择账号」浮层;体现多环境隔离 |
|
||||||
|
| 5 | 隐私与加密 | 打开扩展的「设置/Vault 锁定」界面 | 展示主口令输入/自动锁定 10 分钟、解密数据只存内存等;截图中避免出现真实密码明文(可用圆点占位符) |
|
||||||
|
|
||||||
|
**截屏建议工具**:Chrome DevTools → 右上角 ⋮ → Run command → 输入 `Capture full size screenshot`(再配合 `emulate device` 设定 1280x800 视口),或使用系统截图软件裁切到 1280x800。
|
||||||
|
|
||||||
|
**截图合规注意**:
|
||||||
|
- 截图中不要出现**真实账号的真实密码明文**(用点号 `••••` 代替,避免泄露与审核疑虑)。
|
||||||
|
- 不使用测试站点 URL 时,请用公开示例域名(example.com / example.org);若使用真实网站(如 GitHub 登录页),请确保不截取他人隐私数据。
|
||||||
|
- 截图与图内文字语言应与你当前录入的语言一致(en 截图配英文界面,zh-CN 截图可配中文界面)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、小促销图(440x280,必填)制作建议
|
||||||
|
|
||||||
|
- 用途:商店列表与搜索结果卡片;显示面积小,文字与图形务必简洁。
|
||||||
|
- 构图:左侧/中央放扩展开机主界面缩略(侧边栏面板),右侧放 1 条品牌文案,如:
|
||||||
|
- EN:`Auto Login Manager` + `Fill credentials, keep them encrypted on your device`
|
||||||
|
- 中文:`Auto Login Manager` + `自动填充账号密码,本地加密保存`
|
||||||
|
- 规则:四周留安全边距(至少 16px),避免文字被裁切;不要加圆角/边框;不要做成多截图拼接。
|
||||||
|
- 工具:Figma / Canva / PowerPoint 导出 PNG,或使用 `baidu-image-gen` 按 440x280 生成插画背景后叠加真实界面截图。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、Marquee(1400x560,可选)制作建议
|
||||||
|
|
||||||
|
- 用途:商店精选位横版大图;有背景展示空间。
|
||||||
|
- 构图:左侧大标题 + 右侧界面/功能特写,或居中「图标 + 产品名 + 一句卖点」。
|
||||||
|
- 建议背景使用品牌主色(与图标一致)渐变色块,避免纯白内容被吞。
|
||||||
|
- 内容形式示例:`Log in with one click` / `Local encryption. No servers.`(若已在上架描述中使用本地加密卖点,保持一致口径)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、商店图标(128x128)复核/重制建议
|
||||||
|
|
||||||
|
- 现状:`icons/icon128.png` 为完整方形图形,符合「图形占 96x96、四周透明边 16px」要求的概率存疑,**建议复核或重制**:
|
||||||
|
1. 打开 `icons/icon128.png`,检查最外圈 16px 是否透明;
|
||||||
|
2. 若非透明,用编辑器把画布扩到 160x160 并把原图居中到 96x96 区域导出 128x128(或直接用设计工具重新按 16px 安全边距重绘);
|
||||||
|
3. 导出 PNG(不要用 JPEG,透明通道会失效),压缩后体积极小即可。
|
||||||
|
- 同组图标:`icon16/icon48/icon128` 三档需同时更新,保持视觉一致(Chrome 工具栏、上下文菜单、商店展示用同一图形)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 六、宣传视频(可选,en 语言建议提供)
|
||||||
|
|
||||||
|
- 规格:YouTube 视频,1280x720 以上,时长建议 ≤60 秒。
|
||||||
|
- 建议脚本大纲:
|
||||||
|
1. 人物打开某网站登录页 → 侧边栏打开面板 → 一键填充 → 自动提交进入后台(约 15s);
|
||||||
|
2. 展示多环境账号选择(约 15s);
|
||||||
|
3. 展示验证码只填充不提交(约 10s);
|
||||||
|
4. 隐私卡片式收尾:`Everything stays on your device. No servers involved.`(约 10s)。
|
||||||
|
- 录屏工具:系统自带录屏 / OBS 录制 1280x800 视口,避免录到书签栏等无关内容。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、交付前检查清单
|
||||||
|
|
||||||
|
- [ ] 截图 1280x800 或 640x400:PNG/JPEG、直角全出血、内容铺满、无水印
|
||||||
|
- [ ] 截图无密码明文、无私人数据
|
||||||
|
- [ ] 小促销图 440x280:存在、无文字裁切、无边框圆角
|
||||||
|
- [ ] Marquee 1400x560:存在(可选)、无文字裁切
|
||||||
|
- [ ] 图标 128x128:图形居中 ≤96x96、四周透明 ≥16px、三档尺寸(16/48/128)同步
|
||||||
|
- [ ] 图片语言与对应语言的 Store Listing 描述一致
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# URL 填写清单 — Auto Login Manager 上架环境
|
||||||
|
|
||||||
|
> 已确认 `218.61.196.156:41695` 为公网可达地址(用户提供,外网可访问),且当前 Gitea **仅支持 http(无 https)**。
|
||||||
|
> 因此以下 URL 一律使用 `http://`。若日后为该 Gitea 启用 HTTPS,请把前缀整体替换为 `https://`。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. 提交前必须满足的 2 个前置(很重要)
|
||||||
|
|
||||||
|
- [ ] **隐私政策页面需匿名可访问**:审核团队和用户是"无登录"的访客。你的 Gitea 仓库若为 **private**,`/raw/` 地址会要求登录而无法打开。请确保:
|
||||||
|
- 方式 A(推荐):把仓库 `Chrome-extension/auto-login` 设为 **public**(可见性改为公开),这样 `raw` 页匿名可读;
|
||||||
|
- 或方式 B:仅需该文件可匿名访问——但 Gitea 无可单独公开单文件的配置,故实际仍需仓库 public 或借助其他静态托管。
|
||||||
|
- [ ] **`cws-store/privacy.html` 已提交并推送(push)到远程 `master` 分支**。push 后请先以无痕/未登录窗口打开下面「隐私政策 URL」验证能直接渲染出页面,再填入 Dashboard。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 三处 URL 可填值(复制即用)
|
||||||
|
|
||||||
|
| Dashboard 字段 | 填写值(复制) | 说明 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| **主页 URL**(Homepage) | `http://218.61.196.156:41695/Chrome-extension/auto-login` | Gitea 仓库 Web 首页(非 `.git` 裸仓库地址) |
|
||||||
|
| **支持 URL**(Support URL) | `http://218.61.196.156:41695/Chrome-extension/auto-login` | 用户反馈/帮助入口(Gitea 仓库页含 Issues 入口) |
|
||||||
|
| **隐私政策 URL**(Privacy policy) | `http://218.61.196.156:41695/Chrome-extension/auto-login/raw/branch/master/cws-store/privacy.html` | Gitea `/raw/` 直接以 HTML 页面返回,浏览器即可渲染 |
|
||||||
|
|
||||||
|
> 隐私政策 URL 备选(Gitea 内嵌渲染,需登录态,不推荐给审核):
|
||||||
|
> `http://218.61.196.156:41695/Chrome-extension/auto-login/src/branch/master/cws-store/privacy.html`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 你需要做的一步 git 操作(本次仅说明,不代办)
|
||||||
|
|
||||||
|
请把新增/改动的上架材料提交并推送到远程仓库(在你确认无误后执行):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add cws-store/privacy.html cws-store/promo cws-store/*.md
|
||||||
|
git commit -m "docs(cws): 上架材料:促销图 + 隐私政策HTML + URL清单"
|
||||||
|
git push
|
||||||
|
```
|
||||||
|
|
||||||
|
推送后,用浏览器(**无痕模式**)打开隐私政策 URL 验证:
|
||||||
|
- 应能直接看到纯 HTML 的隐私政策页面(中文在前、English 在后),无需登录。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. http / https 风险提示(如实告知)
|
||||||
|
|
||||||
|
- 当前地址为 `http://`。Chrome 桌面端对 http 页面会标注"不安全";Chrome Web Store 审核与用户点击链接时体验略差,官方更推荐 HTTPS 隐私政策页。
|
||||||
|
- 只要内容可正常匿名渲染,纯 http 一般**不影响**上架审核通过;是否接受由你的产品决策。若后续想消除该负面提示,可为这台 Gitea 配置 HTTPS 反向代理(如 Nginx + 免费 Let's Encrypt 证书),届时把第 1 节 URL 前缀换成 `https://` 即可,其余不变。
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-CN">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>隐私政策 / Privacy Policy — Auto Login Manager</title>
|
||||||
|
<style>
|
||||||
|
:root{ color-scheme: light; --bg:#f6f8fb; --card:#ffffff; --ink:#1f2733; --muted:#5b6472;
|
||||||
|
--line:#e4e8ef; --accent:#0f3460; --accent2:#e94560; --code:#f1f4f9; }
|
||||||
|
*{ box-sizing:border-box; margin:0; padding:0; }
|
||||||
|
body{ font-family:"Segoe UI","Microsoft YaHei",-apple-system,sans-serif; background:var(--bg);
|
||||||
|
color:var(--ink); line-height:1.7; padding:32px 16px; }
|
||||||
|
main{ max-width:860px; margin:0 auto; }
|
||||||
|
.doc-banner{ background:linear-gradient(128deg,#16213e,#0f3460); color:#eef2fb; border-radius:14px;
|
||||||
|
padding:28px 30px; margin-bottom:26px; }
|
||||||
|
.doc-banner h1{ font-size:22px; color:#fff; }
|
||||||
|
.doc-banner p{ margin-top:6px; color:#c6cfe3; font-size:14px; }
|
||||||
|
.badge{ display:inline-block; background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.18);
|
||||||
|
border-radius:20px; padding:2px 12px; font-size:12px; margin:10px 6px 0 0; }
|
||||||
|
h2{ font-size:19px; margin:34px 0 12px; padding-bottom:8px; border-bottom:2px solid var(--line); }
|
||||||
|
h2 .idx{ color:var(--accent2); margin-right:6px; }
|
||||||
|
h3{ font-size:15px; margin:20px 0 8px; }
|
||||||
|
.lang-switch{ display:flex; gap:10px; margin: -14px 0 24px; }
|
||||||
|
.lang-switch a{ font-size:13px; color:var(--accent); text-decoration:none; border:1px solid var(--line);
|
||||||
|
padding:4px 14px; border-radius:18px; background:var(--card); }
|
||||||
|
.lang-switch a:hover{ border-color:var(--accent2); }
|
||||||
|
section{ background:var(--card); border:1px solid var(--line); border-radius:14px; padding:26px 30px; margin-bottom:20px; }
|
||||||
|
section.h-zh{ border-top:3px solid var(--accent); }
|
||||||
|
section.h-en{ border-top:3px solid var(--accent2); }
|
||||||
|
p{ margin:10px 0; }
|
||||||
|
ul,ol{ margin:10px 0 10px 20px; }
|
||||||
|
li{ margin:4px 0; }
|
||||||
|
table{ width:100%; border-collapse:collapse; margin:12px 0; font-size:14px; }
|
||||||
|
th,td{ border:1px solid var(--line); padding:9px 12px; text-align:left; vertical-align:top; }
|
||||||
|
th{ background:var(--code); }
|
||||||
|
code{ background:var(--code); border:1px solid var(--line); border-radius:4px; padding:1px 6px;
|
||||||
|
font-size:13px; font-family:"Cascadia Code",Consolas,monospace; }
|
||||||
|
.note{ background:#fff7f7; border:1px solid #f5d8d8; color:#7a2a2a; border-radius:8px;
|
||||||
|
padding:10px 14px; font-size:13.5px; margin:12px 0; }
|
||||||
|
.lang-tag{ font-size:11px; letter-spacing:2px; font-weight:700; }
|
||||||
|
.lang-tag.zh{ color:var(--accent); }
|
||||||
|
.lang-tag.en{ color:var(--accent2); }
|
||||||
|
.toc{ columns:2; column-gap:24px; font-size:14px; margin:8px 0 0; }
|
||||||
|
.toc a{ color:var(--ink); text-decoration:none; }
|
||||||
|
.toc a:hover{ color:var(--accent2); }
|
||||||
|
footer{ text-align:center; color:var(--muted); font-size:13px; margin:34px 0 10px; }
|
||||||
|
a{ color:var(--accent); }
|
||||||
|
@media(max-width:640px){ section{ padding:20px; } .toc{ columns:1; } .doc-banner{ padding:22px; } }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<div class="doc-banner">
|
||||||
|
<h1>隐私政策 / Privacy Policy</h1>
|
||||||
|
<p>Auto Login Manager — Chrome 扩展(Manifest V3)v1.0.0</p>
|
||||||
|
<span class="badge">生效日期 Effective: 2026-09-24</span>
|
||||||
|
<span class="badge">最后更新 Last updated: 2026-09-24</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="lang-switch">
|
||||||
|
<a href="#zh">中文隐私政策</a>
|
||||||
|
<a href="#en">English Privacy Policy</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ======================= 中文 ======================= -->
|
||||||
|
<section class="h-zh" id="zh">
|
||||||
|
<p class="lang-tag zh">中 文 / ZH-CN</p>
|
||||||
|
<h2>一句话说明</h2>
|
||||||
|
<p>本扩展(Auto Login Manager)是一个浏览器端自动填充工具:你为特定网站保存登录配置(域名、用户名、密码),本扩展在你访问已授权网站时自动填充登录表单。所有凭据仅在设置本机口令后以 <strong>AES-GCM-256 密文</strong>保存在你自己的浏览器本机;本扩展<strong>不包含任何网络请求代码,不将任何数据上传到任何服务器。</strong></p>
|
||||||
|
|
||||||
|
<h2>1. 我们收集哪些数据</h2>
|
||||||
|
<p>我们只处理你主动录入的数据,并且这些数据不会离开你的设备。</p>
|
||||||
|
<table>
|
||||||
|
<tr><th>数据类型</th><th>是否收集</th><th>来源</th><th>用途</th></tr>
|
||||||
|
<tr><td>登录配置(域名/URL 匹配规则、用户名、密码、别名)</td><td>是</td><td>你在扩展侧边栏手动录入,或通过「从书签导入」批量生成</td><td>核心功能:自动填充登录表单(单一用途)</td></tr>
|
||||||
|
<tr><td>环境信息(环境名称、环境内配置分组)</td><td>是</td><td>你创建环境时录入</td><td>多环境配置管理</td></tr>
|
||||||
|
<tr><td>设置项(自动提交、填充延迟、选择器、启用状态)</td><td>是</td><td>你配置时录入</td><td>控制填充行为</td></tr>
|
||||||
|
<tr><td>自动提交失败计数</td><td>是</td><td>扩展运行产生</td><td>防止账号因连续自动提交被锁定(纯本地计数)</td></tr>
|
||||||
|
<tr><td>浏览器书签</td><td>是(仅点击「从书签导入」时)</td><td>Chrome 书签 API</td><td>仅在你主动触发时读取书签生成域名配置</td></tr>
|
||||||
|
</table>
|
||||||
|
<p><strong>明确不收集:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>无网络请求:本扩展不含任何向外部服务器发送数据的代码(经代码审查确认,无 <code>fetch</code> / <code>XMLHttpRequest</code> / <code>WebSocket</code> / <code>sendBeacon</code> 调用)</li>
|
||||||
|
<li>无统计分析、无崩溃上报、无广告、无第三方 SDK</li>
|
||||||
|
<li>不读取浏览历史(未申请 <code>tabs</code> 权限;仅在你点击扩展图标时经 <code>activeTab</code> 临时访问当前标签页)</li>
|
||||||
|
<li>不收集设备标识、位置、联系人、支付信息</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>2. 数据保存在哪里</h2>
|
||||||
|
<table>
|
||||||
|
<tr><th>数据</th><th>位置</th><th>说明</th></tr>
|
||||||
|
<tr><td>域名配置、用户名、密码、环境信息</td><td><code>chrome.storage.local</code></td><td>设置本机口令后以 AES-GCM-256 密文保存</td></tr>
|
||||||
|
<tr><td>解锁期间的明文配置</td><td><code>chrome.storage.session</code></td><td>仅内存,浏览器关闭即清除;10 分钟无操作自动锁定</td></tr>
|
||||||
|
<tr><td>加密密钥句柄</td><td>扩展专属 IndexedDB</td><td>存的是不可导出的密钥对象(<code>extractable: false</code>),无法读出原始密钥字节</td></tr>
|
||||||
|
<tr><td>登录失败计数</td><td><code>chrome.storage.local</code></td><td>非敏感,仅用于失败次数限制</td></tr>
|
||||||
|
</table>
|
||||||
|
<p>主口令本身<strong>不会被保存</strong>到任何存储位置。它仅用于派生加密密钥,解锁后只保留派生结果。</p>
|
||||||
|
|
||||||
|
<h2>3. 加密方式</h2>
|
||||||
|
<ul>
|
||||||
|
<li>密钥派生:PBKDF2-SHA256 + 随机盐(本机口令 200,000 次迭代;导出文件口令 100,000 次迭代)</li>
|
||||||
|
<li>数据加密:AES-GCM-256(带完整性校验的认证加密)</li>
|
||||||
|
<li>密钥属性:不可导出(<code>exportKey()</code> 按设计失败),只能用于加解密</li>
|
||||||
|
</ul>
|
||||||
|
<p>如果你忘记本机口令,<strong>数据无法恢复</strong>,这是加密设计的必然结果。</p>
|
||||||
|
|
||||||
|
<h2>4. 权限用途(与清单权限逐项对应)</h2>
|
||||||
|
<table>
|
||||||
|
<tr><th>权限</th><th>用途</th></tr>
|
||||||
|
<tr><td><code>storage</code></td><td>保存加密配置(<code>storage.local</code>)与解锁期间的会话数据(<code>storage.session</code>)</td></tr>
|
||||||
|
<tr><td><code>activeTab</code></td><td>你点击扩展图标时临时访问当前标签页,用于「在当前页面填充」与「填入当前域名」</td></tr>
|
||||||
|
<tr><td><code>scripting</code></td><td>在需要时按需注入填充脚本</td></tr>
|
||||||
|
<tr><td><code>sidePanel</code></td><td>显示扩展侧边栏界面</td></tr>
|
||||||
|
<tr><td><code>bookmarks</code></td><td>仅当你点击「从书签导入」时读取书签,用于批量生成域名配置</td></tr>
|
||||||
|
</table>
|
||||||
|
<p><strong>网站访问权限采取最小化设计:</strong>本扩展未在安装时申请任何全站访问权限(manifest 仅含 <code>optional_host_permissions: ["*://*/*"]</code>)。只有在你保存某个域名配置时,才会询问一次「是否允许访问该网站」;未授权的网站不会执行任何本扩展脚本。你可以随时在 <code>chrome://extensions</code> 中撤销授权,撤销后该网站不再自动填充(手动填充仍可用)。</p>
|
||||||
|
<p><strong>无强制内容注入:</strong>本扩展的 manifest 中不包含 <code>content_scripts</code> 声明,不会在你未授权的情况下自动向任何网页注入脚本;填充脚本仅在已授权网站或你手动触发时按需注入。</p>
|
||||||
|
|
||||||
|
<h2>5. 数据的导出与删除</h2>
|
||||||
|
<ul>
|
||||||
|
<li>导出:由你主动触发,导出的文件保存在你指定的位置,可选择用文件口令加密后导出</li>
|
||||||
|
<li>删除单条配置:在侧边栏中删除即可</li>
|
||||||
|
<li>删除全部数据:卸载本扩展,或清除该扩展的存储数据(<code>chrome://extensions</code> → 扩展详情 → 清除数据)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>6. 第三方共享</h2>
|
||||||
|
<p>不存在。本扩展不与任何第三方共享数据,因为它不向外传输数据;不涉及数据出售、广告、跨站追踪。</p>
|
||||||
|
|
||||||
|
<h2>7. 政策变更</h2>
|
||||||
|
<p>若本政策发生实质性变更,将更新本文件顶部的「政策最后更新」日期,并随扩展版本更新一并发布;涉及数据处理方式变更时,将按 Chrome Web Store 政策要求主动进行显著披露。</p>
|
||||||
|
|
||||||
|
<h2>8. 联系方式</h2>
|
||||||
|
<ul>
|
||||||
|
<li>支持 / 反馈:<a href="mailto:chenxuanvictory@163.com">chenxuanvictory@163.com</a></li>
|
||||||
|
<li>项目主页:<a href="http://218.61.196.156:41695/Chrome-extension/auto-login">http://218.61.196.156:41695/Chrome-extension/auto-login</a></li>
|
||||||
|
</ul>
|
||||||
|
<p>如有隐私相关问题,也可通过上述渠道联系我们,我们会在合理时间内回复。</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- ======================= English ======================= -->
|
||||||
|
<section class="h-en" id="en">
|
||||||
|
<p class="lang-tag en">E N G L I S H</p>
|
||||||
|
<h2>Summary</h2>
|
||||||
|
<p>Auto Login Manager is a browser-side auto-fill tool. You save login entries (domain, username, password) for websites you choose; the extension auto-fills the login form when you visit an authorized site. All credentials are stored on your own machine, encrypted with <strong>AES-GCM-256</strong> after you set a local master password. <strong>The extension contains no networking code and transmits nothing anywhere.</strong></p>
|
||||||
|
|
||||||
|
<h2>1. Data We Collect</h2>
|
||||||
|
<p>We only handle data you enter yourself, and it never leaves your device.</p>
|
||||||
|
<table>
|
||||||
|
<tr><th>Data type</th><th>Collected</th><th>Source</th><th>Purpose</th></tr>
|
||||||
|
<tr><td>Login entries (domain / URL match rules, username, password, alias)</td><td>Yes</td><td>You type them into the side panel, or generate them in bulk via "import from bookmarks"</td><td>Core function: auto-fill login forms (single purpose)</td></tr>
|
||||||
|
<tr><td>Environment info (environment names and config groups)</td><td>Yes</td><td>You create environments in the UI</td><td>Multi-environment config management</td></tr>
|
||||||
|
<tr><td>Settings (auto-submit, fill delay, selectors, enabled state)</td><td>Yes</td><td>You configure them</td><td>Control fill behavior</td></tr>
|
||||||
|
<tr><td>Auto-submit failure counters</td><td>Yes</td><td>Generated by the extension at runtime</td><td>Prevents account lockout from repeated auto-submits (local counter only)</td></tr>
|
||||||
|
<tr><td>Browser bookmarks</td><td>Yes (only when you click "import from bookmarks")</td><td>Chrome bookmarks API</td><td>Read bookmarks only when you explicitly trigger the import</td></tr>
|
||||||
|
</table>
|
||||||
|
<p><strong>Explicitly not collected:</strong></p>
|
||||||
|
<ul>
|
||||||
|
<li>No network requests: the extension contains no code that sends data to any server (verified by code review: no <code>fetch</code> / <code>XMLHttpRequest</code> / <code>WebSocket</code> / <code>sendBeacon</code> calls)</li>
|
||||||
|
<li>No analytics, no crash reporting, no ads, no third-party SDKs</li>
|
||||||
|
<li>No browsing history (the <code>tabs</code> permission is not requested; the active tab is accessed temporarily via <code>activeTab</code> only when you click the extension icon)</li>
|
||||||
|
<li>No device identifiers, location, contacts, or payment information</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>2. Where Data Is Stored</h2>
|
||||||
|
<table>
|
||||||
|
<tr><th>Data</th><th>Location</th><th>Notes</th></tr>
|
||||||
|
<tr><td>Domain configs, usernames, passwords, environments</td><td><code>chrome.storage.local</code></td><td>Stored as AES-GCM-256 ciphertext once a master password is set</td></tr>
|
||||||
|
<tr><td>Decrypted configs while unlocked</td><td><code>chrome.storage.session</code></td><td>In-memory only; cleared when the browser closes; auto-locks after 10 minutes of inactivity</td></tr>
|
||||||
|
<tr><td>Encryption key handle</td><td>Extension-owned IndexedDB</td><td>A non-extractable key object; raw key bytes cannot be read out</td></tr>
|
||||||
|
<tr><td>Login failure counters</td><td><code>chrome.storage.local</code></td><td>Non-sensitive; used only to throttle repeated auto-submits</td></tr>
|
||||||
|
</table>
|
||||||
|
<p>The master password itself is <strong>never written to any storage</strong>. It is only used to derive the encryption key.</p>
|
||||||
|
|
||||||
|
<h2>3. Encryption</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Key derivation: PBKDF2-SHA256 with a random salt (200,000 iterations for the master password; 100,000 for exported file passwords)</li>
|
||||||
|
<li>Data encryption: AES-GCM-256 (authenticated encryption with integrity checks)</li>
|
||||||
|
<li>Key property: non-extractable — <code>exportKey()</code> fails by design</li>
|
||||||
|
</ul>
|
||||||
|
<p>If you forget your master password, the data <strong>cannot be recovered</strong>. That is an inherent property of the encryption design.</p>
|
||||||
|
|
||||||
|
<h2>4. Permissions (mapped 1:1 to the declared permissions)</h2>
|
||||||
|
<table>
|
||||||
|
<tr><th>Permission</th><th>Purpose</th></tr>
|
||||||
|
<tr><td><code>storage</code></td><td>Save encrypted configs (<code>storage.local</code>) and unlocked session data (<code>storage.session</code>)</td></tr>
|
||||||
|
<tr><td><code>activeTab</code></td><td>Temporary access to the active tab when you click the extension icon, for "fill current page" and "fill current domain"</td></tr>
|
||||||
|
<tr><td><code>scripting</code></td><td>Inject the fill script on demand</td></tr>
|
||||||
|
<tr><td><code>sidePanel</code></td><td>Render the side panel UI</td></tr>
|
||||||
|
<tr><td><code>bookmarks</code></td><td>Read bookmarks only when you click "import from bookmarks", to generate domain configs in bulk</td></tr>
|
||||||
|
</table>
|
||||||
|
<p><strong>Site access is minimal by design:</strong> the extension does not request any install-time access to all websites (the manifest only declares <code>optional_host_permissions: ["*://*/*"]</code>). You are asked once, when you save a config for a domain, whether to allow access to that site. No extension script runs on sites you have not authorized. You can revoke grants at any time from <code>chrome://extensions</code>; revoked sites simply stop auto-filling (manual fill still works).</p>
|
||||||
|
<p><strong>No forced content injection:</strong> the manifest declares no <code>content_scripts</code>. The extension never injects scripts into any page without your authorization; fill scripts are injected on demand only on authorized sites or when you trigger fill manually.</p>
|
||||||
|
|
||||||
|
<h2>5. Export and Deletion</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Export is always user-initiated; optional file-password encryption is available</li>
|
||||||
|
<li>Delete individual entries in the side panel</li>
|
||||||
|
<li>Delete everything by uninstalling the extension or clearing its storage data</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>6. Third Parties</h2>
|
||||||
|
<p>None. The extension does not share data with any third party because it does not transmit data anywhere; no data selling, no ads, no cross-site tracking.</p>
|
||||||
|
|
||||||
|
<h2>7. Policy Changes</h2>
|
||||||
|
<p>Material changes will be reflected in the "Last updated" date at the top of this document and shipped with a new extension version. Changes to data handling practices will be proactively disclosed as required by Chrome Web Store policy.</p>
|
||||||
|
|
||||||
|
<h2>8. Contact</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Support / feedback: <a href="mailto:chenxuanvictory@163.com">chenxuanvictory@163.com</a></li>
|
||||||
|
<li>Project home: <a href="http://218.61.196.156:41695/Chrome-extension/auto-login">http://218.61.196.156:41695/Chrome-extension/auto-login</a></li>
|
||||||
|
</ul>
|
||||||
|
<p>For privacy-related questions, please contact us through the channels above; we will respond within a reasonable timeframe.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer>Auto Login Manager · Privacy Policy v1.0.0 · 2026-09-24</footer>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# 促销图素材(Auto Login Manager — Chrome Web Store)
|
||||||
|
|
||||||
|
本目录为商店促销图交付物,尺寸已按官方规格**像素级精确**,可直接上传。
|
||||||
|
|
||||||
|
| 文件 | 用途 | 尺寸 | 必填 | 状态 |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `promo-440x280.png` | 小促销图 Small promo tile | 440x280 | 是 | ✔ 可直接上传 |
|
||||||
|
| `promo-1400x560.png` | Marquee 大促销图 | 1400x560 | 可选 | ✔ 可直接上传 |
|
||||||
|
| `promo_440.html` / `promo_1400.html` | 设计源文件 | – | – | 可改源码重新导出 |
|
||||||
|
|
||||||
|
## 素材说明
|
||||||
|
|
||||||
|
- **设计语言**:采用扩展真实界面视觉(深色主题 `#1a1a2e`、强调色 `#e94560`、卡片 `#16213e`),右侧面板为按真实 `popup.css` 样式绘制的界面缩略,如实反映产品功能(域名配置列表 + 一键填充 + 多环境)。
|
||||||
|
- **文案语言**:促销图不分语言仅上传一次,采用英文主文案,与商店 `en` 列表口径一致(隐私卖点、单一用途表述与隐私政策一致)。
|
||||||
|
- **全出血直角**:无圆角边框、无外框、无 padding,背景铺满整幅,符合 Chrome 官方 "full bleed" 要求。
|
||||||
|
- **安全边距**:文字均保留安全区内,已在 440x280 / 1400x560 各分辨率下核对无裁切。
|
||||||
|
|
||||||
|
## 使用 / 再导出方法(如需微调)
|
||||||
|
|
||||||
|
1. 用任意编辑器改 `promo_440.html` / `promo_1400.html`(CSS 变量、文案、面板条目)。
|
||||||
|
2. 用 Chrome headless 重新导出 PNG:
|
||||||
|
```powershell
|
||||||
|
& "C:\Program Files\Google\Chrome\Application\chrome.exe" --headless=new --disable-gpu `
|
||||||
|
--hide-scrollbars --force-device-scale-factor=1 `
|
||||||
|
--window-size=440,280 `
|
||||||
|
--screenshot="promo-440x280.png" `
|
||||||
|
"file:///E:/gitea/Chrome%20extension/auto-login/cws-store/promo/promo_440.html"
|
||||||
|
# 1400x560 同理改 --window-size=1400,560 与对应 html
|
||||||
|
```
|
||||||
|
3. 若你希望促销图改用**真实运行的侧边栏截图**而非仿真面板,可把货真价实的界面截图替换进面板区域(把 `<div class="panel">` 换成 `<img src="你的截图">`),重导出即可。
|
||||||
|
|
||||||
|
> 提示:若商店中你给 zh-CN 语言也填了一套截图,促销图仍只需上传一次(官方不做本地化)。如需要中文文案版的促销图,可把左侧卖点与面板文字换成中文后重新导出本 README 提供的命令。
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 332 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 75 KiB |
@@ -0,0 +1,85 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head><meta charset="utf-8"><style>
|
||||||
|
* { margin:0; padding:0; box-sizing:border-box; }
|
||||||
|
html,body{ width:1400px; height:560px; }
|
||||||
|
body{ overflow:hidden;
|
||||||
|
font-family:"Segoe UI","Microsoft YaHei",-apple-system,sans-serif;
|
||||||
|
background:
|
||||||
|
radial-gradient(90% 150% at 100% -30%, rgba(233,69,96,0.5) 0%, rgba(233,69,96,0.15) 40%, transparent 62%),
|
||||||
|
radial-gradient(120% 160% at -5% 130%, rgba(15,52,96,0.95) 0%, transparent 55%),
|
||||||
|
linear-gradient(128deg,#1a1a2e 0%,#12203d 46%,#0f3460 100%);
|
||||||
|
color:#e0e0e0;
|
||||||
|
}
|
||||||
|
/* grid decoration */
|
||||||
|
.grid{ position:absolute; inset:0; pointer-events:none;
|
||||||
|
background-image:
|
||||||
|
linear-gradient(rgba(255,255,255,.03) 1px, transparent 1px),
|
||||||
|
linear-gradient(90deg, rgba(255,255,255,.03) 1px, transparent 1px);
|
||||||
|
background-size:48px 48px;
|
||||||
|
-webkit-mask-image:radial-gradient(90% 90% at 15% 50%, #000 0%, transparent 70%);
|
||||||
|
mask-image:radial-gradient(90% 90% at 15% 50%, #000 0%, transparent 70%);
|
||||||
|
}
|
||||||
|
.wrap{ position:absolute; inset:0; display:flex; align-items:center; padding:0 64px; }
|
||||||
|
.left{ width:610px; }
|
||||||
|
.brand{ display:flex; align-items:center; gap:16px; }
|
||||||
|
.brand img{ width:52px; height:52px; border-radius:12px; }
|
||||||
|
.brand b{ font-size:26px; color:#fff; letter-spacing:.2px; }
|
||||||
|
.brand small{ display:block; font-size:13px; color:#e94560; letter-spacing:1.5px; font-weight:700; }
|
||||||
|
.hl{ margin-top:26px; font-size:40px; line-height:1.12; color:#fff; font-weight:800; }
|
||||||
|
.hl em{ font-style:normal; color:#e94560; }
|
||||||
|
.sub{ margin-top:14px; font-size:17px; line-height:1.55; color:#b9c0d4; }
|
||||||
|
.points{ margin-top:26px; display:flex; gap:12px; flex-wrap:wrap; }
|
||||||
|
.pt{ display:flex; align-items:center; gap:8px; background:rgba(22,33,62,.85);
|
||||||
|
border:1px solid #0f3460; border-radius:22px; padding:8px 16px; font-size:14.5px; color:#e9edf7; }
|
||||||
|
.pt i{ width:16px; height:16px; border-radius:50%; flex:none;
|
||||||
|
background:radial-gradient(circle at 35% 30%, #ff7d95, #e94560 60%); }
|
||||||
|
.panel{ flex:1; max-width:560px; margin-left:70px; background:#1a1a2e; border:1px solid #0f3460;
|
||||||
|
border-radius:16px; box-shadow:0 30px 70px rgba(0,0,0,.5); padding:18px 20px 22px; }
|
||||||
|
.p-title{ text-align:center; font-weight:700; color:#e94560; font-size:17px; padding-bottom:12px;
|
||||||
|
border-bottom:1px solid #16213e; }
|
||||||
|
.p-env{ display:flex; align-items:center; gap:8px; margin-top:12px; }
|
||||||
|
.p-env span{ font-size:11px; color:#888; }
|
||||||
|
.p-env .sel{ flex:1; background:#16213e; border:1px solid #0f3460; height:28px; border-radius:6px;
|
||||||
|
display:flex; align-items:center; padding-left:10px; font-size:12px; color:#e0e0e0; }
|
||||||
|
.p-env .gear{ width:28px; height:28px; background:#0f3460; border-radius:6px; display:flex;
|
||||||
|
align-items:center; justify-content:center; color:#e0e0e0; font-size:13px; }
|
||||||
|
.items{ margin-top:12px; display:flex; flex-direction:column; gap:9px; }
|
||||||
|
.it{ background:#16213e; border:1px solid #0f3460; border-radius:8px; padding:9px 12px; }
|
||||||
|
.it .d{ font-weight:600; color:#e94560; font-size:14px; }
|
||||||
|
.it .u{ color:#888; font-size:10.5px; margin-top:2px; }
|
||||||
|
.it .u b{ color:#dfe3ee; font-weight:400; letter-spacing:1px; }
|
||||||
|
.it.on{ border-color:#3d6fa8; }
|
||||||
|
.fill{ margin-top:14px; background:#e94560; color:#fff; text-align:center; font-size:13px;
|
||||||
|
font-weight:700; padding:9px 0; border-radius:7px; }
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<div class="grid"></div>
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="left">
|
||||||
|
<div class="brand">
|
||||||
|
<img src="../icons/icon128.png" alt="">
|
||||||
|
<div><small>A U T O L O G I N M A N A G E R</small><b>Auto Login Manager</b></div>
|
||||||
|
</div>
|
||||||
|
<div class="hl">Log in with one click.<br><em>Local encryption.</em> No servers.</div>
|
||||||
|
<div class="sub">Store credentials per site and environment.<br>
|
||||||
|
Fill and submit automatically on authorized pages — only on sites you choose.</div>
|
||||||
|
<div class="points">
|
||||||
|
<div class="pt"><i></i> AES-256 local vault</div>
|
||||||
|
<div class="pt"><i></i> Wildcard & path rules</div>
|
||||||
|
<div class="pt"><i></i> Multi-environment</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel">
|
||||||
|
<div class="p-title">Auto Login Manager</div>
|
||||||
|
<div class="p-env"><span>Environment</span><div class="sel">Production</div><div class="gear">⚙</div></div>
|
||||||
|
<div class="items">
|
||||||
|
<div class="it on"><div class="d">oa.com</div><div class="u">user <b>••••••</b></div></div>
|
||||||
|
<div class="it"><div class="d">git.example.com</div><div class="u">dev <b>••••••</b></div></div>
|
||||||
|
<div class="it"><div class="d">mail.example.com</div><div class="u">me <b>••••••</b></div></div>
|
||||||
|
<div class="it"><div class="d">portal.example.cn</div><div class="u">ops <b>••••••</b></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="fill">Fill current page</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body></html>
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head><meta charset="utf-8"><style>
|
||||||
|
* { margin:0; padding:0; box-sizing:border-box; }
|
||||||
|
html,body{ width:440px; height:280px; }
|
||||||
|
body{ overflow:hidden;
|
||||||
|
font-family:"Segoe UI","Microsoft YaHei",-apple-system,sans-serif;
|
||||||
|
background:
|
||||||
|
radial-gradient(120% 140% at 100% -20%, rgba(233,69,96,0.55) 0%, rgba(233,69,96,0.18) 34%, transparent 60%),
|
||||||
|
radial-gradient(120% 140% at -10% 120%, rgba(15,52,96,0.9) 0%, transparent 55%),
|
||||||
|
linear-gradient(135deg,#1a1a2e 0%,#0f3460 100%);
|
||||||
|
color:#e0e0e0;
|
||||||
|
}
|
||||||
|
.wrap{ position:absolute; inset:0; display:flex; align-items:center; }
|
||||||
|
.left{ flex:1; padding-left:26px; padding-right:12px; }
|
||||||
|
.brand{ display:flex; align-items:center; gap:10px; }
|
||||||
|
.brand img{ width:34px; height:34px; border-radius:8px; }
|
||||||
|
.brand b{ font-size:15px; letter-spacing:.2px; color:#fff; line-height:1.15; }
|
||||||
|
.brand small{ display:block; font-size:9px; color:#e94560; letter-spacing:.4px; font-weight:600; }
|
||||||
|
.hl{ margin-top:14px; font-size:17px; line-height:1.2; color:#fff; font-weight:700; }
|
||||||
|
.hl em{ font-style:normal; color:#e94560; }
|
||||||
|
.sub{ margin-top:7px; font-size:9.5px; line-height:1.4; color:#b9c0d4; }
|
||||||
|
.pill{ margin-top:13px; display:inline-block; background:#e94560; color:#fff;
|
||||||
|
font-size:9.5px; font-weight:700; padding:6px 14px; border-radius:18px; letter-spacing:.3px; }
|
||||||
|
.panel{ width:178px; margin-right:16px; background:#1a1a2e; border:1px solid #0f3460;
|
||||||
|
border-radius:10px; box-shadow:0 14px 30px rgba(0,0,0,.45); padding:10px 10px 12px; }
|
||||||
|
.p-title{ text-align:center; font-weight:700; color:#e94560; font-size:8px; letter-spacing:-.2px;
|
||||||
|
white-space:nowrap; padding-bottom:7px; border-bottom:1px solid #16213e; }
|
||||||
|
.p-env{ display:flex; align-items:center; gap:5px; margin-top:8px; }
|
||||||
|
.p-env span{ font-size:8px; color:#888; }
|
||||||
|
.p-env .sel{ flex:1; background:#16213e; border:1px solid #0f3460; height:16px; border-radius:4px;
|
||||||
|
display:flex; align-items:center; padding-left:6px; font-size:8.5px; color:#e0e0e0; }
|
||||||
|
.items{ margin-top:8px; display:flex; flex-direction:column; gap:6px; }
|
||||||
|
.it{ background:#16213e; border:1px solid #0f3460; border-radius:6px; padding:5px 8px; }
|
||||||
|
.it .d{ font-weight:600; color:#e94560; font-size:9.5px; }
|
||||||
|
.it .u{ color:#888; font-size:7.5px; margin-top:1px; }
|
||||||
|
.it .u b{ color:#dfe3ee; font-weight:400; }
|
||||||
|
.it.on{ border-color:#3d6fa8; }
|
||||||
|
.fill{ margin-top:9px; background:#e94560; color:#fff; text-align:center; font-size:8.5px;
|
||||||
|
font-weight:700; padding:5px 0; border-radius:5px; }
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="left">
|
||||||
|
<div class="brand">
|
||||||
|
<img src="../icons/icon128.png" alt="">
|
||||||
|
<div><small>AUTO LOGIN MANAGER</small><b>Auto Login<br>Manager</b></div>
|
||||||
|
</div>
|
||||||
|
<div class="hl">Auto-fill logins.<br><em>Encrypted</em> on your device.</div>
|
||||||
|
<div class="sub">No servers. No tracking.<br>Multi-environment accounts.</div>
|
||||||
|
<div class="pill">Fill credentials in one click</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel">
|
||||||
|
<div class="p-title">Auto Login Manager</div>
|
||||||
|
<div class="p-env"><span>Env</span><div class="sel">Production</div></div>
|
||||||
|
<div class="items">
|
||||||
|
<div class="it"><div class="d">oa.com</div><div class="u">user <b>••••••</b></div></div>
|
||||||
|
<div class="it on"><div class="d">git.example.com</div><div class="u">dev <b>••••••</b></div></div>
|
||||||
|
<div class="it"><div class="d">mail.example.com</div><div class="u">me <b>••••••</b></div></div>
|
||||||
|
</div>
|
||||||
|
<div class="fill">Fill current page</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body></html>
|
||||||
Reference in New Issue
Block a user