Chrome 查看谷歌商店插件源码路径
从应用商店装的插件,代码是明文躺在本地磁盘上的。这一点跟很多人的直觉不一样——浏览器插件本质就是一份 HTML 加 JS 加 CSS,商店下发的 crx 包安装时会被解压到用户配置目录里,之后浏览器直接从那个目录加载。所以只要找到目录,就能把整份源码翻出来看。
我需要这么做主要有几种情况。一是想学某个插件的实现,看它怎么调的 chrome 扩展 API,怎么处理跨域和消息通信,这比看文档直观。二是插件突然出问题或者行为可疑,想确认它到底往哪儿发请求。三是有的插件从商店下架了,但本地还装着,趁着还能用先把源码备份出来,之后靠开发者模式加载解压目录继续用。
需要提前说明的是,商店里的插件代码基本都经过压缩,变量名是单字母,看起来吃力,但结构还在,配合格式化工具能读。manifest.json 是没被压缩的,这个文件价值最高,权限声明、后台脚本入口、匹配的站点规则全在里面,一眼能看出插件的能力边界。
查看谷歌商店插件源码路径
插件目录藏在用户配置目录下面,而配置目录的位置随操作系统和用户名变化,还会因为多用户配置文件而分成 Default、Profile 1 这些子目录。与其去猜,不如让浏览器自己报出来。
浏览器输入:chrome://version/
这个页面除了版本号,还会列出当前正在使用的配置目录的绝对路径,比手动拼路径可靠得多,尤其是开了多个用户配置的时候。
下面这张图就是这个页面,重点看「个人资料路径」那一行,后面跟的就是要找的目录。

- 上方个人资料路径为插件存在路径
- 进入所在路径
mac空格路径问题空格用’ '替代Application' 'Support- 到扩展工具下查看插件
id
mac 上那条关于空格的提示是实际会卡住的地方。路径里的 Application Support 带一个空格,直接 cd 过去,shell 会把空格当参数分隔符,于是变成两个参数,报路径不存在。处理办法有三种,效果一样:像上面那样把空格用引号括起来、写成 \ 反斜杠转义、或者干脆把整个路径用一对双引号包住。我个人更习惯整段加双引号,看着清楚不容易漏。
接下来要解决的是「哪个目录对应哪个插件」。Extensions 目录下面全是一串三十二位小写字母组成的目录名,那是插件 ID,肉眼完全看不出对应哪个插件。所以要先去扩展管理页面 chrome://extensions/ 把 ID 查出来,需要先在页面右上角打开开发者模式,每个插件的卡片上才会显示 ID。
这张图是扩展管理页面开启开发者模式后的样子,插件名称下方那串字母就是要拿去匹配目录名的 ID。

- 再进入
Extensions目录,找到对应id复制出所需要的插件 - 如遇到目录权限问题
sudo chmod -R 777对应目录名称
进到 ID 目录里还有一层,是以版本号命名的子目录,比如 1.2.3_0,源码在这一层里面。插件更新过的话这里可能残留多个版本目录,取版本号最大的那个。
关于权限那条要多提一句。这些目录属于当前用户,正常情况下读取和复制都不需要提权,遇到拒绝访问,更多是因为浏览器正在运行并占用文件,先完全退出浏览器再试通常就好了。真要改权限的话,777 给得太宽,等于让任何用户都能改写浏览器的配置目录,不建议直接对配置目录整体递归执行。更稳的做法是先把目录复制到自己的工作区,再对副本调整权限,别动原始目录。
路径示例
下面两条分别是 mac 和 Windows 上的典型位置,Default 那一段对应默认用户配置,如果你在用第二个配置文件,它会是 Profile 1,实际值以 chrome://version/ 里显示的为准。
cd /Users/miofly/Library/Application' 'Support/Google/Chrome/Default/Extensions
win 路径
C:\Users\wfly\AppData\Local\Google\Chrome\User Data\Default\Extensions
拷贝示例
定位到之后不要在原地翻改,把整个插件目录复制到一个自己的工作目录里再看。原因是浏览器会周期性校验和更新这些文件,在原位置改动可能被覆盖,也可能让插件校验失败直接被禁用。
cp -r ljjemllljcmogpfapbkkighbhhppjdbg/ /Users/miofly/Downloads/
-r 是递归复制整个目录树。命令里那串字母换成自己查到的插件 ID,目标路径换成自己的目录。
复制出来之后,如果只是想看代码,用编辑器打开就行,先看 manifest.json 摸清结构,再顺着里面声明的入口文件往下读。如果目的是把这个插件继续用起来,去扩展管理页面点「加载已解压的扩展程序」,选中带版本号的那一层目录即可,这样加载的插件不受商店上下架影响,但也不会再自动更新。

还没有留言,来发表第一条吧~