1391 字
7 分钟

IP Geolocation - 掌控浏览器地理位置的 Chrome 扩展

在当今的互联网环境下,隐私保护已成为一个老生常谈的话题。许多用户习惯使用 VPN 或代理工具来隐藏真实的 IP 地址,以此规避追踪或访问特定区域的内容。然而,你是否遇到过这样的情况:明明已经切换了代理 IP,但网页依然精准地定位到了你所在的真实城市?

这通常是因为浏览器的 HTML5 Geolocation API 出卖了你。不同于基于 IP 的定位,网页可以通过 navigator.geolocation 直接请求设备的高精度 GPS 或 Wi-Fi 定位数据。

为了解决这个问题,填补网络层代理与应用层定位之间的隐私缺口,我开发了 IP Geolocation —— 一个开源的 Chrome 浏览器扩展。

项目背景#

IP Geolocation 旨在为用户提供对浏览器地理位置信息的完全控制权。无论你是需要测试不同地区业务逻辑的前端开发者,还是注重隐私的普通用户,这个工具都能帮你”瞬间移动”到世界的任何角落。

核心功能#

IP Geolocation 不仅仅是一个简单的经纬度修改器,它结合了自动检测与手动控制,力求在易用性和灵活性之间找到平衡。

1. 智能的自动定位#

扩展内置了自动化逻辑,能够通过 IP 地理位置 API 根据你当前的出口 IP 地址,自动获取对应的地理位置。这意味着当你切换代理节点时,浏览器的地理位置可以自动跟随变化,实现”身临其境”的伪装。

2. 灵活的手动控制与地图交互#

如果自动定位不够精准,或者你想故意定位到一个虚构的地点,扩展提供了直观的 Leaflet 地图预览。你可以直接在地图上点击选择位置,或者手动输入经纬度坐标。

3. 精细化的白名单/黑名单机制#

并不是所有网站都需要伪装。通过内置的过滤规则,你可以灵活配置:

  • 白名单模式:仅在特定网站(如开发测试环境)启用伪装
  • 黑名单模式:在特定网站(如需要真实导航的地图服务)禁用伪装

4. 隐私保护与本地化优化#

考虑到特定网络环境,扩展加入了一个贴心的隐私保护逻辑:当检测到当前 IP 位于中国大陆时,为了避免意外暴露精确位置,系统会默认使用北京作为兜底位置,而不是透传真实的精确坐标。

技术实现#

作为一款基于 Chrome Manifest V3 规范开发的扩展,IP Geolocation 在技术实现上有几个值得探讨的亮点。

核心原理:API 注入与重写#

如何欺骗网页的定位请求?答案是脚本注入(Script Injection)

我们利用 chrome.scripting.executeScript 在页面加载的最早期注入一段自定义的 JavaScript 代码。这段代码会劫持并重写原生的 navigator.geolocation 对象。

当网页调用 navigator.geolocation.getCurrentPosition 时,它实际上调用的是我们伪造的函数。这个函数不会去查询底层硬件,而是直接返回存储在 chrome.storage.local 中的伪造经纬度数据。

// 伪代码示例:重写 Geolocation API
navigator.geolocation.getCurrentPosition = function(success, error, options) {
const mockPosition = {
coords: {
latitude: userSettings.lat,
longitude: userSettings.lng,
accuracy: 100
},
timestamp: Date.now()
};
success(mockPosition);
};

定时任务与状态同步#

为了保证位置信息的实时性,扩展使用了 chrome.alarms API 创建定时任务,每分钟自动检查一次 IP 变动并更新地理位置缓存。这种异步更新机制确保了用户在使用过程中不会感觉到明显的延迟。

沙箱化的地图预览#

在 Popup 弹窗中加载复杂的地图库(Leaflet)有时会受到 Chrome 内容安全策略(CSP)的限制。本项目通过 iframe 沙箱模式优雅地解决了这个问题,既保证了地图功能的完整性,又符合 Manifest V3 的安全规范。

应用场景#

  1. Web 开发与测试:开发者在调试基于 LBS(地理位置服务)的应用时,无需肉身移动,即可测试应用在不同地区的表现
  2. 海外业务访问:配合代理工具,解决部分流媒体或电商网站因为 GPS 位置与 IP 地址不符而产生的风控拦截
  3. 防止大数据杀熟与追踪:混淆真实的物理活动轨迹,保护个人隐私

快速开始#

目前项目已在 GitHub 开源,你可以通过以下步骤安装体验:

  1. 下载项目的 Release 压缩包git clone 源码
  2. 打开 Chrome 浏览器,进入扩展程序管理页面 (chrome://extensions/)
  3. 开启右上角的”开发者模式”
  4. 点击”加载已解压的扩展程序”,选择项目文件夹

安装完成后,点击浏览器右上角的图标,即可看到当前的定位状态并进行设置。

总结#

IP Geolocation 是一个小而美的工具,它解决了一个具体而实际的问题。通过开源的方式,希望能帮助到更多的开发者和注重隐私的用户。

如果你对这个项目感兴趣,或者有更好的功能建议,欢迎在 GitHub 上提交 Issue 或 PR!

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

IP Geolocation - 掌控浏览器地理位置的 Chrome 扩展
https://blog.daisheng.xyz/posts/ip-geolocation/
作者
园长
发布于
2025-12-28
许可协议
CC BY-NC-SA 4.0

目录