乐于分享
好东西不私藏

Chrome升级后插件全废了?我翻了3小时英文文档,根因就一行设置

Chrome升级后插件全废了?我翻了3小时英文文档,根因就一行设置

昨天Chrome自动升级到148版本。

升级完我电脑上一直在用的浏览器插件直接罢工了。不是那种"偶尔卡一下"的小毛病,是彻底连不上,报错信息看得我头皮发麻:

WebSocket connection to 'ws://127.0.0.1:18765/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

翻译成人话就是:我的插件想跟自己电脑上的一个程序说句话,Chrome直接把嘴堵上了。

折腾了差不多3个小时,翻了一堆英文文档和论坛帖子,终于搞明白了原因和解决办法。

今天把全过程写下来,如果你也遇到了Chrome升级后插件不能用的问题,看完这篇直接就能修好。


到底发生了什么?

▲ 一张图看懂问题和修复方案

Chrome从147版本开始,悄悄加了一个叫"Local Network Access"(局域网访问控制)的安全策略。

到了148版本,这个策略更严格了——它开始限制WebSocket连接访问本机(127.0.0.1或localhost)。

用人话说就是:以前插件可以跟自己电脑上的程序自由聊天,现在Chrome在中间加了个人,审核每一条消息,而且大部分直接拒收。

你可能要问:为什么要限制?

Google的想法是这样的:万一你访问了一个恶意网站,这个网站里的代码偷偷通过WebSocket连接你电脑上的其他程序(比如打印机、路由器管理页面、智能家居控制台),那就危险了。

所以Chrome说:不行,我得拦住。

听起来挺合理的对吧?

问题是——大量正规工具也是通过这种方式工作的。

比如:

• 浏览器自动化插件(帮AI控制浏览器的)

• 安全测试工具(Burp Suite之类的)

• 本地开发工具(热重载、调试器)

• 企业安全软件

• 各种"本地程序+浏览器插件"的组合

这些工具全都是通过浏览器插件连接本机的WebSocket来工作的。Chrome一刀切下去,全给拦了。

而且Chrome升级是自动的,你甚至不知道什么时候就升了,然后插件就突然不好使了。


受影响的是哪些插件?

▲ 从现象到根因

不是所有插件都中招。得同时满足两个条件:

第一,你的Chrome版本是147或更高(目前最新是148)。

第二,这个插件通过WebSocket连接本机地址(127.0.0.1或localhost)。

最常见的受害者:

• 各种浏览器自动化工具(Puppeteer辅助插件、CDP调试桥)

• 本地开发环境的热重载工具

• 安全扫描工具的浏览器插件

• AI浏览器控制插件

• 一些VPN/代理的浏览器辅助插件

如果你最近Chrome自动更新后,某个插件突然不好使了,而且报错里有"WebSocket"或"ERR_CONNECTION_REFUSED"字样,那十有八九就是这个问题。


怎么修?两步搞定

别慌,不用降级Chrome,不用写代码,改一个设置就行。

第一步:打开Chrome的隐藏设置页面

在Chrome地址栏输入:

chrome://flags/#local-network-access-check-websockets

回车。

你会看到一个设置项叫"Local Network Access Checks for WebSockets"。

第二步:改成Disabled

这个设置默认是"Default"(相当于开启)。把它改成 Disabled

然后Chrome底部会弹出一个"Relaunch"按钮,点它重启Chrome。

重启完,插件就恢复正常了。

就这么简单。两步,1分钟搞定。

▲ 修复只需两步

如果上面那个地址找不到,试试这个:

chrome://flags

打开后在页面顶部搜索框搜 "Local Network Access",找到 WebSockets 那一项,同样改成 Disabled 就行。


改这个设置安全吗?

说实话,有一定风险。关掉这个检查意味着浏览器不会额外审查WebSocket连接本机的行为。

但你要知道两件事:

第一,这个检查是Chrome额外加的一层保护,不是唯一的安全防线。你的电脑本身有防火墙,有杀毒软件,有操作系统级别的安全策略。关掉Chrome这一层不会让你的电脑裸奔。

第二,这个检查是Chrome 147才加的,也就是说在此之前你的电脑一直都没有这层保护,也没出什么事。也就是说你的电脑裸奔了好多年,一直好好的。

所以我的建议是:如果你确实需要用到这类插件,关掉是合理的。如果你从来不使用任何通过WebSocket连接本机的工具,那保持默认也行。


给开发者的提醒:代码也得改

这个段落是给写插件的开发者看的,普通用户跳过就行。

如果你的插件代码里用了 chrome.scripting.executeScript,Chrome 148有个隐藏坑:这个方法在某些情况下返回null了,而不是以前的老规矩返回空数组。

如果你的代码直接写 result[0].result,就会报错:

Error: Cannot read properties of null (reading '0')

修复方法很简单,加个空值判断就行:

改之前:

res = result[0]?.result;

改之后:

res = (result && result.length > 0) ? result[0].result : undefined;

就这一行代码的事,但如果你不知道Chrome改了行为,能排查到怀疑人生。我就是这么过来的。


Google能不能别这么搞?

说实话我对Chrome这种"静默破坏"的做法挺无语的。

安全策略当然重要,但你能不能给个提示?比如升级后第一次打开Chrome时弹个窗说"嘿,我们增强了安全策略,可能影响某些插件",而不是让用户自己踩坑然后满世界搜解决方案。

Google自己的开发者文档里写了一句轻描淡写的"Chrome 147 expands Local Network Access restrictions to include WebSocket connections",就这?几百万用户的插件莫名其妙不能用了,就一句话的事?

而且去Reddit上搜搜,Chrome 146开始就有人在骂了,到148了还没给个正经的迁移方案或者用户提示。

算了,骂也没用。至少现在你知道怎么修了。


如果你身边也有朋友Chrome升级后插件挂了,把这篇文章转给他们。两步就能搞定,不用重装不用降级。

关注AI智管局,回复"Chrome插件"获取更多浏览器工具实测和避坑指南。

你有没有遇到过Chrome升级后什么工具突然不能用的经历?评论区说说你被坑最惨的一次,我看看谁比我还惨。

🔧 浏览器工具实测 · 避坑指南

更多浏览器工具实测和避坑技巧