一尘不染

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

javascript

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

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


阅读 420

收藏
2020-04-22

共2个答案

一尘不染

我的crystal ball说您正在使用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),它们都将被视为不同的来源。

2020-04-22
一尘不染

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

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

Python 2

如果你安装了Python …

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

使用以下命令启动Python Web服务器 python -m SimpleHTTPServer

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

你可以使用自定义端口 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服务器 http-server -c-1

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

Ruby

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

ruby -run -e httpd . -p 8080

PHP

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

php -S localhost:8000
2020-04-22