Repository navigation
Releases
v1.1.5
1.1.4 已发布;以下是 1.1.4 之后的累计改动。
修复
- 设置里点「清理」黑屏:系统设置调用的是
navTo('falcon://<appid>/cleanUp')(页名cleanUp),
而本应用先前只注册了cleanup,找不到页面即空白。现已按系统页名注册,产物为cleanUp.js.bin;
同时确认打包器按【文件名】生成模块名,页名与文件名必须严格一致(共用同一 .vue 会被改名成cleanUp2.js而取不到)。 - 数据清理页无法滚动:正文由普通容器改为可滚动容器并取满剩余高度,内容超出屏高时可上下滑动。
- 竖屏机型显示不全:全屏容器与宽列不再写死像素,改用百分比与弹性布局并允许换行,
横条屏(960×266)与竖屏全面屏(如 4.4 英寸 1210×568)都不再被裁切;视口宽度仍取自固件配置。 - 凭据无法正常保存:保存账号 / 密码 / 认证服务器改为等待写入完成并【回读校验】,日志记录校验结果;
同时原生 KV 调用加 1.5s 超时与多形态尝试,避免固件 Promise 挂起把写入卡死。「记住密码」默认开启。 - 兼容性检测误判:原生扩展以 ES 模块注册(
import { Panet } from 'panet'),不会挂到
globalThis/$falcon.jsapi上,旧判据会误报「原生扩展未加载」;改为读取平台层自报的实际传输通道。 - 功能检测页进入卡顿:进页先出首帧,存储回环 / 网络实测 / 迁移检查 / 兼容性判定延后到下一轮事件循环执行。
- 功能检测页报
r/L is not defined:报告拼装函数缺少局部变量声明与空值保护,已补。 - 检测页真实系统信息全显示
-:报告层在调用方未传取值函数时会静默返回空对象,
现缺省直接调用平台层systemInfo(),读取失败写日志而非吞掉。 - 关于页二维码在设备上黑屏:Weex 的图片组件对相对路径不可靠,打包器也不收集
src/assets;
改为把二维码转成 data URI 随 JS 打包(services/qq-qr.js),并裁掉邀请卡多余部分只保留码本身。 - 关于页弹层按钮超出屏幕:二维码与卡片尺寸按横条屏高度重排(码 140×140、卡片自适应)。
- 反馈页文字重叠 / 按钮点不动:按钮尺寸原先挂在组合选择器上,而 Weex 只支持单类名,
导致按钮无宽高且样式整体丢失;另padding: 8px 10px这类简写在 Weex 不生效。
现已全部改为单类名 + 完整尺寸 + 单属性内边距,并给文本加行高。 - 反馈页输入框调不出键盘:此前调用的是不存在的方法名;改用输入法封装的
open({ text, placeholder, maxlength })。 - 反馈提交失败(原生层 5 处):
- 请求封装只接受对象参数,原先按位置参数调用导致
url=undefined,请求根本没发出; - 自研网络库只实现 POSIX socket、不支持 TLS,反馈服务地址由 https 改为 http 直连(实测该域名 http 可达且不跳转);
- 原生 POST 请求体上限 64KB,装不下整份日志 → 放宽到 512KB,客户端日志上限同步收到 40KB;
- 读取响应只等对端关闭,而反代返回 keep-alive 不断连 → 改为按 HTTP 语义判断读完(Content-Length / chunked 终止块);
- 响应体按 latin1 逐字节解码且解析时取了字节数组字段,中文乱码致 JSON 解析失败 → 改为 UTF-8 解码并优先取解码后的文本。
原生请求失败现在都会写日志(此前异常被吞掉,只能看到状态码 0)。
- 请求封装只接受对象参数,原先按位置参数调用导致
新增
-
兼容性检测:启动时对存储(写—读回环)/ 页面基类 / 传输通道 / 网络逐项真实调用,
给出「兼容 / 兼容(降级)/ 不兼容」三档判定,写日志并在主页与「功能检测」页展示;
判据是能力实测而非机型白名单,新机型无需改代码即可得到结论。 -
H3C iMC Portal 认证适配器(
ui/src/services/portal-adapters/h3c-imc.js):
适配http://<门户>:8080/portal/?userip=…&userurl=…的校园 / 企业网页认证;
登录pws?t=li(密码base64后再 URL 编码),响应base64→percent→JSON,
630xx业务码本地映射中文;按heartBeatCyc发送doHeartBeat.jsp保活(keepAlive),
支持pws?t=lo下线。传输层(native/panet)同步支持 POST 表单 body 与自定义请求头,
并对请求头做注入校验(拒绝 CR/LF、过滤逐跳头)。协议取证见 docs/h3c-imc-portal.md。
(PR #2) -
CVI 机型真机适配(固件 1.6.3 / api=1):
net-cvi改用固件原生
$falcon.jsapi.http.request({url, method, timeout, headers:['K: v']})(实测唯一可用形态),
并把返回翻译成统一形态:成功{result}→200、errorMessage.resCode→ 对应状态码(204 即空包体),
其余error→ 失败;detect增加portalProxyIP/portalProxyPort兜底,
适配器与门户判定无需为 CVI 开特例。实测记录见 docs/cvi-jsapi-http.md。
(PR #2) -
问题反馈页(新页面,主页顶栏「反馈」进入):用户用系统输入法填写「问题描述」与「详细情况」
(均为必填)与「联系方式」(QQ / 邮箱,选填),提交时自动附带机型 SKU、词典笔系统版本、
运行日志(上限 40KB)与能力探测报告;页面顶部固定标注网页反馈入口(没网时可用电脑 / 手机打开),
勾选《用户条款》后方可提交,条款逐条列明收集与不收集的信息;可一键跳到「关于」页查看用户群二维码。 -
真实系统信息读取:新增原生
systemInfo(),直接读/Version(词典笔 OS 版本)、
/etc/os-release、/proc/version、device-tree 板型、/proc/cpuinfo与sys_config sku;
「功能检测」页按「SKU / 主机名 / PCBA / 词典笔 OS / 固件 / 编译时间 / 系统底座 / 内核 / 架构 / 板型 / SoC」
展示,框架版本单独一组,不再把框架版本当成系统与型号。
变更
-
六个页面全部重写,统一设计语言并彻底自适应:主页(状态卡 + 登录面板 + 认证类型 + 手动服务器)、
设备管理(摘要 + 设备卡片 + 确认弹层)、功能检测(结论条 + 六个分组卡片)、数据清理、迁移提示、关于;
宽度一律百分比 + flex-wrap,横条屏(960×266)与竖屏全面屏(1210×568)都完整显示。 -
README 全量重写:功能 / 机型与产物 / 安装 / 使用 / 连通性判定 / 兼容性检测 / 外部调用 /
开发与测试 / 常见问题 / 许可 / 公开参考项目,事实与当前实现对齐。 -
门户识别补充
userurl/userip/basip特征与跳转参数提取,提高 iMC 类门户的识别率。 -
版本号升至 1.1.5(
ui/package.json与ui/src/services/version.js同步)。
待真机 / 真网复核
- CVI 上
http.request的 POST body 字段固件文档未定义,本版同时传body/data并保留
query 双写兜底;真实校园网(H3C iMC)需复核一次 POST 是否被接受。 - 真实门户页的
portalProxyIP解析建议在目标校园网复测(本地已用 mock 页覆盖)。 - H3C iMC 真网登录 / 心跳 / 下线全流程仍需在目标校园网走一遍。
贡献者
- H3C iMC Portal 认证适配器、CVI 机型真机适配:PR #2(@wanfeng74)
v1.1.3
v1.1.3
修复
- 不再误报「无需登入」: 部分网关会对连网检测端点免认证放行(探测源能通、通用网络不通), 旧版本
据此显示「无需登入」并隐藏登录表单, 用户实际仍上不了网。现在 204 只算证据, 必须再用非探测源
站点复核通过才报「无需登入」; 复核被拦截判需要认证, 复核不通则如实提示「无网络连接」并给出原因。 - 门户证据优先: 任一探测源被拦截即判需要认证, 不再按「谁先返回」决定结果(判定不再被响应时序左右)。
- 异常响应不再当作已连通: 无有效状态码、非 204 的空包体等一律不计入「已连通」。
- 不再卡在「正在检测…」: 复核请求增加硬超时兜底, 请求挂起也会给出结论。
- 认证服务器按网络隔离: 换到其它网络时不再沿用上一个网络记住的门户服务器, 避免在无关网络上
出现「已通过认证 / 设备管理 / 下线」等内容。 - 设备管理入口更严谨: 即使服务器挂在同一网络名下, 也必须确认它在当前网络真的可用, 否则不显示
设备管理/下线, 也不会自动跳入管理页。 - 网络名称读不到时不再串网: 读取不到当前网络名称时, 账号与认证服务器不会再写进其它网络的槽位;
原生模块增加多种方式读取当前网络名称, 降低读不到的概率。 - 外部调用登录也会正确归档凭据: 被其它小程序直接拉起登录时, 会先取当前网络名称再保存账号。
变更
- 主页「连通性测试」行、运行日志与 status.json 增加复核依据 (confirm / freeCount), 排查时能直接
看出「无需登入」是经哪个站点复核得到的。 - 版本号升至 1.1.3 (ui/package.json 与 ui/src/services/version.js 同步)。
文档
- README 重构: 徽章、真机截图、连通性判定说明(为什么会显示「无需登入」)、常见问题、开发与测试。
- docs/external-api.md 与 README 的示例地址改用通用占位, 避免读者误当成真实部署地址。
- 本文件改为按 Keep a Changelog 维护, 未发布内容统一归档到「未发布」段落。
由 GitHub Actions 自动发布 · commit 5b4984a
v1.1.2
v1.1.2
新增
- CVI (CVITEK / RISC-V C906) 机型适配: 服务层新增平台实现层
(ui/src/services/platform/), CVI 平台使用固件原生$jsapi/http(网络请求) 与
$jsapi/system_kv(账号存储) 模块替代自研 panet 原生库, 页面/UI/适配器代码完全复用;
依据官方引擎库 yocop/iot_miniapp_sdk 分析实现,
尚无 CVI 真机验证 - Release 产物按平台区分:
...-rk.amr(RK3562 / X6PRO) 与...-cvi.amr
(CVITEK / RISC-V 机型), CI 一次构建同时产出两个平台
变更
- 检测状态写盘与日志页改为经平台服务层调用 (页面不再直接依赖 panet), 多平台复用的必要重构;
RK 版功能与行为不变
已知限制 (CVI 版)
- 无文件 JS 模块: 运行日志为内存缓冲 (应用内可看, 重启清空), 不写 status.json
- 无"当前连接 SSID"查询接口: 记忆密码回退"最近使用"槽位 (按 WiFi 隔离的粒度降低)
- 详见 README「设备兼容性与平台」
由 GitHub Actions 自动发布 · commit 3d5abb4
v1.1.1
v1.1.1
修复
- 检测命中门户后不出现登录表单 (issue #1): 检测回调内误用
this调用
afterPortal(回调内this不是 Vue 实例), 抛出的异常被静默吞掉, 导致界面
卡在"正在检测…"且日志无[适配器]/[配置]行; 现改用实例引用, 并给
afterPortal增加异常兜底 (出错时提示手动选择认证类型或输入服务器地址) - 检测在网络请求挂起时永久卡住:
net.js请求层增加 JS 超时兜底 (原生
request 挂起也能返回失败, 检测/登录/列表/心跳全部受益);detect.js增加
全局兜底判决与 abort 轮询 (取消后立即结束); 单源超时 5s → 3.5s - 网络直连时进设备管理页误报"该认证类型不支持设备管理": 回填 adapterId
(该 WiFi 记住的适配器 / 第一个注册的) - 点击主页状态区会触发重新检测: 状态区 (屏幕中部大片区域) 此前绑定了点击重检,
容易误触; 现仅顶栏「重新检测」按钮触发检测 (切后台回来与从设备管理页返回的
自动重检保持不变)
验证
- 本地模拟 (注入桩): 检测挂起/部分挂起/abort/超时兜底 7 场景 + 原有 5 套测试全过
- 真机模拟认证网络 (DNS + 302 劫持 + mock Panabit 服务端) 跑通全链路:
检测 → 劫持解析 → 自动识别适配器 → 登录表单 → 登录成功 → 复查放行 → 自动进设备管理页
由 GitHub Actions 自动发布 · commit 2552e9f
v1.1.0
v1.1.0
新增
- 认证框架化: 本体只提供通用框架 (连通性检测、认证页类型自动识别、适配器注册表、UI、
账号存储、日志), 认证协议由可插拔适配器模块实现 (ui/src/services/portal-adapters/),
内置 Panabit 适配器作为默认适配器与演示模板 - 认证页类型自动识别: 检测到被强制门户拦截后, 各适配器按页面特征 (跳转 URL 参数 /
页面标题 / 内容 / 响应头) 评分取最高; 识别不出回退该 WiFi 上次成功登录所用的适配器,
再不行界面「认证类型」选择行由用户手动选择 (选完可手动输入服务器地址);
登录成功按 WiFi 记住所用适配器, 下次同 WiFi 优先复用 - 适配器能力化: 设备管理入口按适配器能力显示 (提供
listDevices才显示);
外部调用支持adapter=<id>强制指定适配器 - 适配器开发指南: 仓库根目录
ADAPTER.md(接口契约 + 全流程) 与配套SKILL.md
(前端代码来源询问 / 设备加密能力探查 / 阻塞情形告知 / 问题主动报告)
优化
- 界面美化: 四页统一设计语言 (状态色点、分隔线、消息色条、顶栏对齐、Wi 徽标、
日志按 tag 着色、版本徽章), 配色改为纯黑主题 - 渲染/解码性能: 日志页内容未变跳过整列表重渲染; 管理页设备列表对比更新并以
在线 IP 作列表 key (下线单台不整列重渲); base64 解码预建查找表 (每字符 O(1))
由 GitHub Actions 自动发布 · commit 2c06f9b
v1.0.0
v1.0.0
首个正式版。运行在有道词典笔(960×266 横条屏)上的
Panabit 网页认证登录工具,用于替代笔上打不开的认证网页。
软件功能
连通性检测
- 使用小米 / vivo / 华为三个国内探测源,并发竞速:同时发起,首个给出确定结论的
直接采纳(正常网络下约 35ms 出结果,而非逐个串行等待);单源失败不判决,全部失败才判无网络 - 被强制门户劫持时,解析出跳转页面(支持 302 Location、meta refresh、location.href、
带wlanuserip/paip参数的链接),展示 Portal 服务器地址与跳转 URL - 网络直连正常时提示"无需登入",已认证则自动进入设备管理页
登录与凭据
- Panabit
webauth/user_login账号密码登录,密码经 AES-128-ECB/ZeroPadding 加密
(密钥Panabit@1024_key,与网页端pa_aes_encode一致) - 记住密码按 WiFi 隔离:每个 WiFi 各存各的账号,换网络不会串用上一个网络的密码
(存储结构{ accounts: { "<ssid>": {...} } },WiFi 名称由原生panet.wifiSsid()读取) - 密码不显明文:已记住的密码只显示圆点掩码;新输入的密码明文显示 3 秒便于核对
- 账号 / 密码通过
global.startTextEdit唤起系统级"有道输入法"输入
设备管理
- 在线设备列表(
ucenter/load_user_list):设备名 / 在线 IP / MAC / 在线时长,自动标记「本机」 - 单设备下线(
ucenter/user_offone):每台设备一个下线按钮 + 自绘确认弹层 - 全部下线(
ucenter/user_offall):下线后自动返回主页重新检测 - 列表 15 秒自动刷新
会话与稳定性
- 会话保活:认证页停留期间 30 秒心跳,避免 token 过期;会话过期类失败自动刷新重试一次
(密码错误 / 锁定 / 需改密不重试) - 前后台切换不冲突:每次重检会取消上一次在途探测,迟到结果不再覆盖新状态;
输入法面板引起的 onHide/onShow 被识别并抑制,不会冲掉登录表单 - 服务器不可达时行为收敛:管理页拿不到数据会自动退回主页,并进入 3 分钟冷却,
不会在主页与管理页之间反复跳转 - 运行日志写入
/userdisk/xiro/wifi.log(自动建目录、超过 512KB 轮转),
应用内「日志页」可直接查看最近 120 行 - 支持手动指定认证服务器(探测失败或无响应时)
外部调用接口
- 其他小程序可通过
navTo('falcon://8001865309000001/index', {...})调用:
action=login|log|check、预填server/username/password、auto=1自动提交 action=check的检测结果经事件回传给调用方,callback 名可指定
安装
adb push 8001865309000001.1_0_0.amr /data/local/tmp/
adb shell miniapp_cli install /data/local/tmp/8001865309000001.1_0_0.amr
adb shell miniapp_cli start 8001865309000001设备兼容性
- 仅在有道词典笔 X6PRO 上完成真机验证,其他机型未做适配测试
- 其他机型如遇到问题,欢迎提交 Issues(附机型、固件版本与
wifi.log)或提交 PR - PR 合并前提:不得影响 X6PRO 上已验证的现有功能;
机型差异请用能力探测做分支处理,不要直接改掉通用逻辑
已知限制
- 认证服务器不可达时管理页不可用,此时主页会提示并停止自动进入(3 分钟冷却)
- 设备 IP 无法从固件查询(jsapi 无
nm模块),Portal 参数以服务器下发的跳转参数为准 - 服务端 GB2312 中文无法转 UTF-8(固件无
misc模块),错误信息用错误码本地映射代替
由 GitHub Actions 自动发布 · commit a394607