我试图加载一个3D模型,存储在我的电脑本地,到Three.js与JSONLoader, 3D模型是在同一目录下,作为整个网站。

我得到了“跨起源请求只支持HTTP.”错误,但我不知道是什么原因导致它也不知道如何修复它。


当前回答

我也能够在使用以下href的锚标记时重新创建此错误消息:

<a href="javascript:">示例:一个标签</a> .

在我的情况下,一个标签被用来获得“指针光标”和事件实际上是由一些jQuery点击事件控制。我删除了href并添加了一个应用的类:

光标:指针;

其他回答

如果你使用VS代码,试着在那里加载一个活动服务器。立即解决了我的问题。

很多问题,我的问题是缺少'/'的例子: jquery-1.10.2.js:8720 XMLHttpRequest无法加载http://localhost:xxxProduct/getList_tagLabels/ 必须是:http://localhost:xxx/Product/getList_tagLabels/

我希望这对遇到这个问题的人有所帮助。

对我来说,最快的方法是: 对于windows用户在Firefox上运行文件的问题解决了,或者 如果你想使用chrome,对我来说最简单的方法是安装Python 3,然后从命令提示符运行命令Python -m http。服务器,然后访问http://localhost:8000/,然后导航到您的文件

python -m http.server

对于那些在Windows上没有Python或Node.js的人,仍然有一个轻量级的解决方案:Mongoose。

您所要做的就是将可执行文件拖到服务器的根目录,然后运行它。一个图标将出现在任务栏中,它将导航到默认浏览器中的服务器。

此外,Z-WAMP是一个100%可移动的WAMP,在一个文件夹中运行,这是很棒的。如果你需要一个快速的PHP和MySQL服务器,这是一个选择。不过从2013年起就没有更新过。现代的替代方案是Laragon或WinNMP。我还没有对它们进行测试,但它们是可移植的,值得一提。

此外,如果你只想要绝对的基础(HTML+JS),这里有一个小的PowerShell脚本,不需要安装或下载任何东西:

$Srv = New-Object Net.HttpListener;
$Srv.Prefixes.Add("http://localhost:8080/");
$Srv.Start();
Start-Process "http://localhost:8080/index.html";
While($Srv.IsListening) {
    $Ctx = $Srv.GetContext();
    $Buf = [System.IO.File]::OpenRead((Join-Path $Pwd($Ctx.Request.RawUrl)));
    $Ctx.Response.ContentLength64 = $Buf.Length;
    $Ctx.Response.Headers.Add("Content-Type", "text/html");
    $Buf.CopyTo($Ctx.Response.OutputStream);
    $Buf.Close();
    $Ctx.Response.Close();
};

这个方法非常简单,它不能显示目录或其他花哨的东西。但是它很好地处理了这些CORS错误。

将脚本保存为服务器。在项目的根目录下运行。它将在它所在的目录中启动index.html。

如果您坚持在本地运行.html文件,而不是将其与web服务器一起提供,那么您可以通过使有问题的资源内联可用来防止这些跨起源请求的发生。

当我试图通过file://来提供.js文件时,我遇到了这个问题。我的解决方案是更新我的构建脚本,以取代<script src="…">标签与<script>…</script>. " 这里有一个吞咽的方法:

1. 运行NPM install——save-dev来安装gulp、gulp-inline和del包。

2. 在根目录中创建gulpfile.js后,添加以下代码(只需更改文件路径以适合自己):

let gulp = require('gulp');
let inline = require('gulp-inline');
let del = require('del');

gulp.task('inline', function (done) {
    gulp.src('dist/index.html')
    .pipe(inline({
        base: 'dist/',
        disabledTypes: 'css, svg, img'
    }))
    .pipe(gulp.dest('dist/').on('finish', function(){
        done()
    }));
});

gulp.task('clean', function (done) {
    del(['dist/*.js'])
    done()
});

gulp.task('bundle-for-local', gulp.series('inline', 'clean'))

要么运行gulp bundle-for-local,要么更新构建脚本以自动运行它。

您可以在这里看到我的案例的详细问题和解决方案。