我不喜欢 IP 属地,但是你手机都显示了,为什么电脑不显示呢?
一个用户脚本,让哔哩哔哩网页版评论区也能显示 IP 属地,支持大部分场景。
- 浏览器:最新版 Chrome / Edge / Firefox / Safari 等支持 扩展 API 的现代浏览器。
- 用户脚本管理器:推荐
- Chrome/Edge/Firefox: Tampermonkey 或 Violentmonkey
- Safari: Stay(主要功能免费)或 Tampermonkey(付费)。
Tip
如果你使用非推荐环境,请确保你的用户脚本管理器支持 unsafeWindow。
推荐的用户脚本管理器(Tampermonkey、Violentmonkey、Stay 等):
FireMonkey 等对上下文要求严格的脚本管理器
Lite 版本移除了对 GM API 的使用(这意味着「文本替换」功能将不可用),额外添加了 @inject-into page(脚本将直接完整注入网页,目前仅在 Firefox 下有效)
-
为什么个人主页的 IP 属地没有显示?
- 个人主页需要额外的逻辑处理,已单独实现:
-
为什么我的评论区没有显示 IP 属地?
- 注意:在「B 站上线 IP 属地功能」前发布的评论不会显示。
- 部分场景可能未适配。请检查是否支持该场景,并确认脚本已在当前页面激活。
- 请确保脚本为最新版本且运行正常。可尝试关闭其他可能冲突的脚本来排查问题。
- 如果您是首次使用用户脚本管理器,需要开启「开发者模式」与「允许用户脚本」。
点击展开完整列表
- 视频(普通视频、番剧(影视)、收藏列表播放页)评论区
- 话题评论区
- 动态评论区
- 个人主页动态评论区
- 专栏(文章)作者 & 评论区
- 节日页(festival)评论区(如「拜年祭」」
- 活动页(blackboard)评论区(如「拜年祭预约页」)
- 课程评论区
- 小黑屋评论区
- 漫画详情页评论区
(未作特殊说明均支持新旧版)
支持对 IP 属地文本 进行自定义替换,用于优化展示效果或满足国际化需求。
使用步骤:
-
打开脚本管理器菜单,点击 「更新替换规则」
-
在弹出的对话框中输入 JSON 格式的替换规则,例如:
去除「IP 属地:」前缀,仅显示地区名称,可以使用如下规则:
{"IP属地:": ""} -
点击确定后,页面会自动刷新并应用新规则
规则说明:
- 规则需为 JSON 对象:键表示原始文本,值表示替换后的文本
- 支持配置多条规则,并按顺序依次执行
- 所有页面中的 IP 属地信息都会应用这些替换规则
虽然 B 站未在 Web 前端界面展示 IP 属地信息,但相关数据实际上仍存在于后端接口及前端组件内。本脚本的工作原理是:在评论组件(完成)渲染时,将 IP 属地数据注入到 DOM 中。
具体来说,目前 B 站前端评论区存在三种实现:
-
旧版评论(Vue 2):基于 Vue 2 实现,目前仅在旧版页面存在。
- 策略:通过 Hook
window.bbComment,重写评论插入事件,在期间插入 IP 属地。
- 策略:通过 Hook
-
新版评论(Vue 3):基于 Vue 3 实现(comment-pc-vue.next.js)。
- 策略:
- 由于不存在全局的
bbComment对象,通过MutationObserver监听评论区的 DOM 变更,捕获新插入的评论节点,解析其原始数据并渲染 IP 属地。 - 自 V1.5.8+ 起,由于某次更新后
__vue__不再存在于元素下,引入 Hook Vue3 app 将__vue__实例手动挂载至目标 DOM 元素。
- 由于不存在全局的
- 策略:
-
新版评论(Lit):基于 Lit 的 Web Components(comment-pc-elements.next.js),目前存在于大部分常用场景。
- 策略:通过 Hook
window.customElements.define,拦截ActionButtonsRender,继承并重写其生命周期方法update(),在组件更新渲染时完成 IP 属地的插入。
- 策略:通过 Hook
-
- 灵感来源
- 参考了部分代码
-
- 提供最佳开发体验
-
- 提供了继续保持原有脚本逻辑的底层支持
-
帮助测试 & 提供反馈的朋友们
