申请过中国银行哔哩哔哩 2233 联名借记 IC 卡的朋友大概都有这种体验:在官方查询页面看到的永远只有一句笼统的「制卡中」,看不到卡到底走到了哪一步、什么时候开始制卡、有没有寄出。
其实页面上显示的只是一个状态字段,页面背后的数据里还有更完整的节点信息。这篇文章介绍一个在安卓手机上的小技巧:用 Via 浏览器保存一段 javascript: 书签脚本,在「制卡中」那个页面点一下书签,就把页面内部的完整进度数据以 JSON 形式打印出来。
一、准备工作
- 一台安卓手机(iOS 上的 Safari / Chrome 无法这样执行书签脚本)
- Via 浏览器(体积小巧,对
javascript:书签的支持比较完整) - 你自己的线上申请链接或查询入口
下面是官方线上申请入口(B站渠道):
https://open.boc.cn/bankcard/cardReserve/index.html#/?appId=8AFAF8C546EB63E9AE3202BC13DB46FC&prodId=P260802MYZGWK2025060515073600001&subProdId=JJKYY&funcId=cardIntroduce&chanId=bili_bzapp链接里的 appId、prodId、chanId 等参数都是有意义的,建议整条原样打开,不要裁剪。
二、第一步:把脚本存成书签
要用的代码就只有一行:
javascript:(()=>{try{let x=document.getElementsByClassName("progress-result-wrap")[0].__vue__.$parent.recordInfo;alert(JSON.stringify(x,null,2))}catch(e){alert("读取失败:"+e.message)}})();在 Via 浏览器里新建书签,名称填「查询制卡进度」,网址粘贴上面这一整行,保存。
这里有两个几乎人人会踩的坑:
javascript:前缀不能丢。 保存时确认网址是以javascript:开头的。不少浏览器会把往地址栏里粘贴的javascript:前缀直接抹掉,所以不要图省事往地址栏贴——一定走「书签」这条路。- 整行不能断。 中间一旦被编辑器或输入框自动换行、或插入空格,脚本就失效了。粘贴后建议从头到尾扫一眼,确认是一整行。
三、第二步:打开「制卡中」页面,点书签
- 用 Via 打开申请 / 查询入口,按提示查询你的卡片进度;
- 当页面显示出 「制卡中」 这个状态时,停留在这个页面;
- 点开地址栏或菜单,选择刚才创建的「查询制卡进度」书签。
正常情况下会立刻弹出一个窗口,里面是格式化好的 JSON,例如:
{
"…": "…"
}里面通常是这张卡在制卡流程里的各个节点信息(状态、时间、以及后续的物流相关信息等)。字段名称会随页面版本变化,以实际弹出来的内容为准,这里不逐一列举。
四、原理:脚本到底做了什么
页面是 Vue 框架渲染的,Vue 会把组件实例挂到对应的 DOM 元素上(__vue__)。脚本的逻辑就三步:
- 按类名
progress-result-wrap找到进度结果那块 DOM; - 顺着
__vue__拿到组件实例,再往上一层父组件取它的recordInfo(就是页面用来渲染进度的原始数据); - 用
JSON.stringify(x, null, 2)把它格式化后alert出来。
外面套了 try...catch,所以万一页面改版、取不到数据,会弹「读取失败:」加上具体原因,而不是毫无反应。
五、安全性说明
这段脚本值得单独说清楚,因为它做的事情很有限:
- 只读:只从当前页面的内存里读数据,不写入、不修改页面;
- 不联网:没有任何网络请求,数据不会发往任何第三方;
- 不外传:数据只通过浏览器的
alert弹窗显示给你自己看。
真正的风险在你自己这一侧:弹出的数据可能包含你的个人信息(姓名、证件号、手机号、物流地址等),截图分享到网上之前记得打码。
另外要强调:请只在官方页面(open.boc.cn)上使用这段脚本,不要在来路不明的页面上执行任何 javascript: 代码——同样的手法换个脚本,就能把你的数据送出去。
六、常见问题
点了书签没反应?
十有八九是 javascript: 前缀在保存时被吞掉了,或者这行脚本断了行。重新编辑书签,把整行完整粘贴一次。
弹出「读取失败:…」?
可能的原因:页面还没完全加载完(等状态显示出来再点);页面改版导致类名或数据结构变了(这种情况下脚本需要相应调整);或者当前不是 Vue 渲染的进度页。
弹出的内容和我预期的不一样?
字段会随版本调整,脚本做的事只是把页面已有的数据原样打印,不做任何解读。以页面上显示的状态为最终依据。
「制卡中」一直不变?
制卡和邮寄本身需要时间。这个脚本只是让你能看到更细的节点,并不改变流程进度。
七、小结
整件事其实就一句话:把一段读取页面内部数据的脚本存成 Via 书签,在「制卡中」的页面点一下。
代码放在下面,方便直接复制:
javascript:(()=>{try{let x=document.getElementsByClassName("progress-result-wrap")[0].__vue__.$parent.recordInfo;alert(JSON.stringify(x,null,2))}catch(e){alert("读取失败:"+e.message)}})();最后提醒一句:以上读到的只是页面呈现的数据,卡片的实际状态请以银行系统的记录为准。页面若改版,脚本可能失效,届时把类名或字段名按新版本改一下即可。