Skip to content

maxchang3/BiliReveal

Repository files navigation


我不喜欢 IP 属地,但是你手机都显示了,为什么电脑不显示呢?

BiliReveal

Greasy Fork 总下载量

一个用户脚本,让哔哩哔哩网页版评论区也能显示 IP 属地,支持大部分场景

使用环境

Tip

如果你使用非推荐环境,请确保你的用户脚本管理器支持 unsafeWindow

安装方式

推荐的用户脚本管理器(Tampermonkey、Violentmonkey、Stay 等):

FireMonkey 等对上下文要求严格的脚本管理器

从 Github Release 安装 Lite 版本

Lite 版本移除了对 GM API 的使用(这意味着「文本替换」功能将不可用),额外添加了 @inject-into page(脚本将直接完整注入网页,目前仅在 Firefox 下有效)

常见问题

  • 为什么个人主页的 IP 属地没有显示?

  • 为什么我的评论区没有显示 IP 属地?

目前支持的场景

点击展开完整列表
  • 视频(普通视频、番剧(影视)、收藏列表播放页)评论区
  • 话题评论区
  • 动态评论区
  • 个人主页动态评论区
  • 专栏(文章)作者 & 评论区
  • 节日页(festival)评论区(如「拜年祭」」
  • 活动页(blackboard)评论区(如「拜年祭预约页」)
  • 课程评论区
  • 小黑屋评论区
  • 漫画详情页评论区

(未作特殊说明均支持新旧版)

配置选项

文本替换

支持对 IP 属地文本 进行自定义替换,用于优化展示效果或满足国际化需求。

使用步骤:

  1. 打开脚本管理器菜单,点击 「更新替换规则」

  2. 在弹出的对话框中输入 JSON 格式的替换规则,例如:

    去除「IP 属地:」前缀,仅显示地区名称,可以使用如下规则:

    {"IP属地:": ""}
  3. 点击确定后,页面会自动刷新并应用新规则

规则说明:

  • 规则需为 JSON 对象:键表示原始文本,值表示替换后的文本
  • 支持配置多条规则,并按顺序依次执行
  • 所有页面中的 IP 属地信息都会应用这些替换规则

原理

虽然 B 站未在 Web 前端界面展示 IP 属地信息,但相关数据实际上仍存在于后端接口及前端组件内。本脚本的工作原理是:在评论组件(完成)渲染时,将 IP 属地数据注入到 DOM 中。

具体来说,目前 B 站前端评论区存在三种实现:

  • 旧版评论(Vue 2):基于 Vue 2 实现,目前仅在旧版页面存在。

    • 策略:通过 Hook window.bbComment ,重写评论插入事件,在期间插入 IP 属地。
  • 新版评论(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 属地的插入。

感谢

Stargazers over time

Stargazers over time

About

Reveal IP location on Bilibili web. 在哔哩哔哩网页版显示 IP 属地。

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors