JavaScript通过本地文件系统打开 HTML 文件跨域问题

281 阅读2分钟

...origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: chrome, chrome-extension, chrome-untrusted, data, http, https, isolated-app.

这个错误是因为你直接通过本地文件系统(file:// 协议)打开 HTML 文件,而现代浏览器出于安全考虑,禁止通过 file:// 协议进行跨域模块加载(ES6 import 属于跨域请求的一种)。

解决方法:使用本地服务器运行文件

你需要通过 HTTP 服务器来访问这些文件,而不是直接双击打开。以下是几种简单的实现方式:

方法 1:使用 VS Code 的 Live Server 插件(推荐)

  1. 在 VS Code 中安装「Live Server」插件
  2. 右键点击你的 HTML 文件
  3. 选择「Open with Live Server」
  4. 浏览器会自动打开 http://127.0.0.1:5500/ 或类似地址,此时 CORS 错误会消失

方法 2:使用 Python 内置服务器(无需安装额外软件)

  1. 打开终端 / 命令提示符
  2. 导航到你的 HTML 和 JS 文件所在目录
cd /path/to/your/files
  1. 运行以下命令启动服务器:
  • Python 3.x:

    python -m http.server
    
  • Python 2.x:

    python -m SimpleHTTPServer
        ```
    
    
  1. 在浏览器中访问 http://localhost:8000

方法 3:使用 Node.js 的 http-server(需要安装 Node.js)

  1. 全局安装 http-server:
npm install -g http-server
  1. 进入文件目录并启动:
cd /path/to/your/files
http-server
  1. 访问 http://localhost:8080

为什么会出现这个错误?

  • 当你直接双击 HTML 文件时,浏览器使用 file:// 协议访问

  • ES6 模块的 import 语句会触发跨域请求检查

  • 浏览器不允许 file:// 协议下的跨域请求,因此出现 CORS 错误

  • 通过 HTTP 服务器访问时,使用的是 http:// 协议,符合浏览器的安全策略

选择上述任意一种方法启动本地服务器后,你之前编写的模块导入代码就能正常工作了。