open in browser 插件需设为 server 模式才能正确打开本地 html 文件并支持 fetch 等功能,配置项为 "openinbrowser.default": "server",否则 file:// 协议会因浏览器安全限制导致 js 功能失效。

VS Code 怎么让 Open in Browser 插件正确打开本地 HTML 文件
默认情况下,VS Code 不自带“在浏览器中打开”功能;你装了插件(比如 Open in Browser),但点右键 → Open in Default Browser 却打不开,或者地址是 file:/// 路径、被浏览器拦截——这是最常见的情况,根本原因不是插件坏了,而是它默认用的是文件协议,而现代浏览器(Chrome/Firefox/Edge)出于安全限制,会拒绝执行 file:// 下的某些 JS/CSS 功能(比如 fetch、localStorage、模块导入)。
- 必须启用本地开发服务器模式:插件设置里把
openInBrowser.default改成server,而不是file - 对应配置项在
settings.json中是:"openInBrowser.default": "server"
- 确保插件已启用且没有被其他同名插件冲突(比如
View In Browser或Live Server同时存在) - 第一次运行会自动起一个
http://127.0.0.1:5500/xxx.html这样的地址,端口可配,但别设成 80 或 443(需要管理员权限)
为什么不用 Live Server 插件反而容易出问题
很多人试过 Live Server,结果改了代码没自动刷新,或控制台报 net::ERR_CONNECTION_REFUSED。这不是 VS Code 的锅,而是它的行为逻辑和 Open in Browser 不同:它会监听整个工作区根目录,而不是当前文件;如果你没在项目根下打开 VS Code(比如直接打开了子文件夹里的 index.html),它就找不到 package.json 或配置,可能静默失败。
-
Live Server默认端口是5500,若被占用会换端口,但不会提示——检查终端输出或右下角状态栏有没有显示Starting Server at http://127.0.0.1:xxxx - 它不支持直接打开非根目录下的 HTML(比如
/src/pages/about.html),除非你在该路径下重新打开一个 VS Code 窗口 - 如果用了
base标签(如<base href="/assets/">),它可能因路径解析错乱导致资源 404
openInBrowser 插件怎么配才能打开指定浏览器(比如 Edge 而不是 Chrome)
插件默认调用系统默认浏览器,但你可以强制指定。关键是改 openInBrowser.customBrowser 配置项,值不是浏览器名字,而是可执行文件的绝对路径(Windows 上带 .exe,macOS/Linux 上是二进制路径)。
- Windows 示例:
"openInBrowser.customBrowser": "C:\Program Files\Microsoft\Edge\Application\msedge.exe"
- macOS 示例(Edge):
"openInBrowser.customBrowser": "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"
- 路径里不能有空格未转义,也不能用
~,必须写全路径;用 VS Code 内置终端执行which edge或where edge可查真实路径 - 如果填错路径,点击打开时会无声失败——没有报错弹窗,只会在开发者工具 Console 里看到
spawn ENOENT
本地 HTML 带 fetch('./data.json') 却报跨域,怎么破
这不是 VS Code 或插件的问题,而是浏览器对 file:// 协议的硬性限制。哪怕你用插件“打开”,只要地址栏显示 file:///,fetch 就必然失败。唯一解法是走 HTTP 协议,也就是必须用 server 模式。
- 确认插件配置中
openInBrowser.default是server,且当前文件保存在磁盘上(未保存的临时文件无法 serve) - 如果仍报错,检查 JSON 文件路径是否相对正确:比如 HTML 在
/project/index.html,那fetch('./data.json')就要求data.json和它同级;而 server 模式是以当前文件所在文件夹为根,不是整个工作区 - 避免用
../跨级引用——server 模式默认不支持目录逃逸,会 403










