协慌网

登录 贡献 社区

“仅 HTTP 支持跨源请求。” 加载本地文件时出错

我正在尝试使用JSONLoader将 3D 模型加载到 Three.js 中,并且该 3D 模型与整个网站位于同一目录中。

我收到"Cross origin requests are only supported for HTTP."错误,但我不知道是什么原因导致的,也不知道如何解决。

答案

我的水晶球说您正在使用file://C:/加载模型,因为错误消息不是http:// ,所以对错误消息保持正确

因此,您既可以在本地 PC 上安装 Web 服务器,也可以将模型上传到其他地方,然后使用jsonp并将 url 更改为http://example.com/path/to/model

起源在RFC-6454 中定义为

...they have the same
   scheme, host, and port.  (See Section 4 for full details.)

因此,即使您的文件源自同一主机( localhost ),但是只要方案不同( http / file ),它们就会被视为不同的来源。

明确地说 - 是的,错误是说您不能直接将浏览器指向file://some/path/some.html

以下是一些选项,可以快速启动本地 Web 服务器,以使您的浏览器呈现本地文件

Python 2

如果您安装了 Python ...

  1. 使用命令cd /path/to/your/folder将目录更改为文件some.html或文件所在的文件cd /path/to/your/folder

  2. 使用命令python -m SimpleHTTPServer启动 Python Web 服务器

这将启动一个 Web 服务器来托管您的整个目录列表, http://localhost:8000http://localhost:8000

  1. 您可以使用自定义端口python -m SimpleHTTPServer 9000为您提供链接: http://localhost:9000

此方法内置于任何 Python 安装中。

Python 3

执行相同的步骤,但是使用以下命令python3 -m http.server

Node.js

或者,如果您需要更敏感的设置并已使用 nodejs ...

  1. 安装http-server通过键入npm install -g http-server

  2. 进入您的some.html所在的工作目录

  3. 通过发出http-server -c-1启动您的 http 服务器

这会启动一个 Node.js httpd,它将您目录中的文件作为可从http://localhost:8080访问的静态文件来提供

红宝石

如果您首选的语言是 Ruby ... Ruby Gods 表示这也可以:

ruby -run -e httpd . -p 8080

的 PHP

当然,PHP 也有其解决方案。

php -S localhost:8000

在 Chrome 中,您可以使用以下标志:

--allow-file-access-from-files

在这里阅读更多。