Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “仅HTTP支持跨源请求。”加载本地文件时出错_Javascript_File_Http_Three.js_Cors - Fatal编程技术网

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

Javascript “仅HTTP支持跨源请求。”加载本地文件时出错,javascript,file,http,three.js,cors,Javascript,File,Http,Three.js,Cors,我正在尝试使用JSONLoader将一个3D模型加载到Three.js中,该3D模型与整个网站位于同一目录中 我得到的跨源请求仅支持HTTP。错误,但我不知道是什么导致的,也不知道如何修复它。我的水晶球说您正在使用file://或C://加载模型,这与错误消息保持一致,因为它们不是http:// 因此,您可以在本地PC中安装Web服务器,也可以将模型上载到其他地方,然后使用jsonp并将url更改为http://example.com/path/to/model 原产地定义如下: 因此,即使您的

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


我得到的跨源请求仅支持HTTP。错误,但我不知道是什么导致的,也不知道如何修复它。

我的水晶球说您正在使用file://或C://加载模型,这与错误消息保持一致,因为它们不是http://

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

原产地定义如下:


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

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

这里有一些选项可以快速启动本地web服务器,让您的浏览器呈现本地文件

Python 2 如果您安装了Python

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

使用命令Python-msimplehttpserver启动Python web服务器

这将启动一个web服务器,以在http://localhost:8000

您可以使用自定义端口python-m SimpleHTTPServer 9000提供以下链接:http://localhost:9000 这种方法内置于任何Python安装中

Python 3 执行相同的步骤,但使用以下命令代替python3-mhttp.server

Node.js 或者,如果您需要更具响应性的设置,并且已经在使用nodejs

通过键入npm Install-g http server安装http服务器

切换到yoursome.html所在的工作目录

通过发出http server-c-1启动http服务器

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

红宝石 如果您的首选语言是Ruby。。。红宝石之神说这同样有效:

ruby -run -e httpd . -p 8080
PHP 当然,PHP也有它的解决方案

php -S localhost:8000
今天遇到了这个

我写了一些类似这样的代码:

app.controller('ctrlr', function($scope, $http){
    $http.get('localhost:3000').success(function(data) {
        $scope.stuff = data;
    });
});
app.controller('ctrlr', function($scope, $http){
    $http.get('http://localhost:3000').success(function(data) {
        $scope.stuff = data;
    });
});
…但应该是这样的:

app.controller('ctrlr', function($scope, $http){
    $http.get('localhost:3000').success(function(data) {
        $scope.stuff = data;
    });
});
app.controller('ctrlr', function($scope, $http){
    $http.get('http://localhost:3000').success(function(data) {
        $scope.stuff = data;
    });
});
唯一的区别是第二段代码中缺少http://代码


我只是想说出来,以防有其他人有类似的问题。

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

--allow-file-access-from-files

我在浏览器上加载HTML文件时遇到了这个错误,该浏览器使用本地目录中的json文件。在我的例子中,我能够通过创建一个简单的节点服务器来解决这个问题,该服务器允许服务器静态内容。我把代码留在这里。

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

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


另外,它是一个100%可移植的WAMP,运行在一个文件夹中,非常棒。如果您需要快速的PHP和MySQL服务器,这是一个选项。

er。我刚刚发现,由于跨源安全限制,一些官方词语试图加载使用dojo/text插件的未构建远程AMD模块将失败。AMD模块的内置版本不受影响,因为内置系统消除了对dojo/text的调用

加载本地文件的一种方法是在项目文件夹中使用它们,而不是在项目文件夹外使用它们。在您的项目示例文件下创建一个文件夹,类似于我们为图像创建的方式,并替换使用项目路径以外的完整本地路径的部分,并使用项目文件夹下文件的相对url。 这对我很有用,对MacOS上的所有人都很有用。。。设置一个简单的LaunchAgent,在您自己的Chrome副本中启用这些迷人的功能

保存一个名为which launch.chrome.dev.mode.plist的plist,例如在~/Library/LaunchAgents中,其内容与

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>launch.chrome.dev.mode</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Applications/Google Chrome.app/Contents/MacOS/Google Chrome</string>
        <string>-allow-file-access-from-files</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
它应该在启动时启动。。但您可以随时使用terminal命令强制它这样做

launchctl load-w~/Library/LaunchAgents/launch.chrome.dev.mode.plist


塔达 这方面有很多问题,我的问题是缺少“/”示例: jquery-1.10.2.js:8720 XMLHttpRequest无法加载 它必须是:


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

它只是说应用程序应该在web服务器上运行。我在chrome上也遇到了同样的问题,我启动了tomcat并将我的应用程序移到了那里,它成功了。

只需将url更改为http://localhost 而不是本地主机。如果从本地打开html文件,则应创建一个本地服务器来服务该html文件,最简单的方法是使用。这将解决问题。

在Android应用程序中-例如
le,允许JavaScript通过file:///android_asset/ -在Web设置上使用setAllowFileAccessFromFileURLstrue,这些设置是通过在WebView上调用getSettings获得的。

如果不使用内置服务器,我建议您使用小型服务器在本地主机上运行此类应用程序

这里有一个非常简单的设置和运行:

https://www.npmjs.com/package/tiny-server
我将列出解决此问题的3种不同方法:

使用非常轻量级的npm包:使用npm安装-g live server安装。然后,转到那个目录,打开终端,键入liveserver并点击enter,页面将在localhost:8080上提供服务。奖励:默认情况下,它还支持热重新加载。 使用Google开发的轻量级Google Chrome:安装应用程序,然后转到Chrome中的应用程序选项卡并打开应用程序。在应用程序中,将其指向正确的文件夹。您的页面将被送达! 在windows中修改Chrome快捷方式:创建Chrome浏览器的快捷方式。右键单击图标并打开属性。在属性中,将目标编辑为C:\Program Files x86\Google\Chrome\Application\Chrome.exe-禁用web安全-用户数据目录=C:/ChromeDevSession并保存。然后使用Chrome,使用ctrl+o打开页面。注意:不要将此快捷方式用于常规浏览。
注意:使用http://likehttp://localhost:8080 如果您遇到错误。

如果您使用Mozilla Firefox,它将正常工作,不会出现任何问题

另外,令人惊讶的是,IntenteExplorer_Edge绝对可以正常工作

为java安装本地Web服务器,例如Tomcat,对于php,您可以使用lamp等 将json文件放到公共可访问的app server目录中 启动应用服务器,您应该能够从localhost访问该文件


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


无法加载静态本地文件例如:没有服务器的svg。如果您的机器中安装了NPM/Thread,您可以使用

或打开该项目文件夹中的终端并键入hs。它将自动启动HTTP live server


我怀疑在一些答案中已经提到了它,但我会稍微修改一下,使完整的工作答案更容易找到和使用

转到:。安装nodejs

通过从命令提示符npm Install-g http server运行命令来安装http服务器

切换到index.html/yoursome.html所在的工作目录

通过运行命令httpserver-c-1启动http服务器

打开web浏览器以http://localhost:8080 或http://localhost:8080/yoursome.html -取决于您的html文件名。

对我来说,最快的方法是: 对于windows用户,在Firefox上运行文件问题已解决,或 如果您想使用chrome,我最简单的方法就是安装Python3,然后在命令提示符下运行命令Python-mhttp.server,然后转到,然后导航到您的文件

python -m http.server
使用http://或https://创建url

错误:localhost:8080

解决方案:http://localhost:8080

使用VS代码的用户的简单解决方案

我犯这个错误已经有一段时间了。大多数答案都有效。但我找到了一个不同的解决方案。如果您不想在这里处理node.js或任何其他解决方案,并且正在使用一个HTML文件从另一个js文件调用函数,或者获取json api,请尝试使用扩展名

它允许您轻松打开实时服务器。由于它创建了本地主机服务器,问题正在解决。只需打开一个HTML文件,右键单击编辑器并单击open with Live Server,即可启动本地主机

它基本上使用http://localhost/index.html 而不是使用file://....

编辑

不需要有.html文件。您可以使用快捷方式启动Live Server

按alt+L、alt+O打开服务器,按alt+L、alt+C停止服务器。[在MAC上,cmd+L,cmd+O和cmd+L,cmd+C]


希望它能帮助某人:

科尔多瓦实现这一目标。我还是不明白科尔多瓦是怎么做的。它甚至不需要经过“应该”的询问

后来我发现从本地加载任何文件的键是:myWebView.getSettings.setAllowUniversalAccessFromFileURLstrue


当您想要访问任何http资源时,webview将使用OPTIONS方法进行检查,您可以通过WebViewClient授予访问权限。应该通过返回响应来进行InterceptRequest,对于下面的GET/POST方法,您可以只返回null。

首先关闭chrome的所有实例

在那之后,跟着这个

我在mac上使用了这个命令

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome-允许从文件访问文件

对于windows:


当我下载一个页面进行脱机查看时,我就体验到了这一点


对于Linux Python用户,我只需从所有和标记中删除integrity=****和crossorigin=anonymous属性:

import webbrowser
browser = webbrowser.get('google-chrome --allow-file-access-from-files %s')
browser.open(url)

如果您坚持在本地运行.html文件,而不使用 作为一个Web服务器,您可以通过内联使用有问题的资源来防止这些跨源请求的发生

我在试图通过file:///提供.js文件时遇到了这个问题。我的解决方案是更新我的构建脚本,用…替换标记。。。。 这里有一个大口大口喝的方法:

一,。 运行npm安装-将开发保存到包gulp、gulp inline和del

二,。 将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或更新构建脚本以自动运行它。

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

您是否尝试在本地执行此操作?您需要使用localhost,即使它是本地文件,但不能跨域!如果你使用的是Chrome浏览器,从终端启动时使用-allow file access from files选项可能会帮助你。是的,当文件与网页位于同一文件夹中时,它不是真正的跨域,现在是不是。。。我发现如果你使用Firefox而不是Chrome,这个问题就会消失。是的,我正试图使用file://,但我不明白为什么这是允许的。嗯,我想我正在安装Lampp……想象一下,如果这是允许的话,网页作者可以使用一个webapp,使用类似load'file://C:/users/user/supersecret.doc'的东西,然后使用ajax等将内容上传到他们的服务器上。但是我正在尝试从我自己的目录加载内容,甚至index.html也在那里!不幸的是,这项政策适用于所有情况,不仅适用于您的:,所以您必须忍受。您也可以在chrome中使用-allow file access from files开关。根据我的回答:这节省了我很多时间,谢谢。我的Python安装没有SimpleHTTPServer模块,但是节点指令工作得很好。作为对LukeP评论的回应,在Python 2.7中,该命令确实按照$Python-m SimpleHTTPServer指令工作,该指令生成消息:在0.0.0.0端口8000上服务HTTP。。。如果模块名称拼写错误,例如$python-m SimpleHttpServer,则会收到错误消息No module name SimpleHttpServer如果安装了python3 v,则会收到类似的错误消息。python 2.7。您可以使用命令:$python-version检查您的python版本。您还可以像下面这样指定要侦听的端口:$python-msimplehttpserver 3333 python服务器从启动服务器的目录提供文件。因此,如果要提供的文件位于/Users/7stud/angular_projects/1app中,则在该目录中启动服务器,例如$cd~/angular_projects/1app,然后是$python-m SimpleHTTPServer。在浏览器中输入urlhttp://localhost:8000/index.html. 您还可以请求启动服务器的目录的子目录中的文件,例如。http://localhost:8000/subdir/hello.htmlI我听说Python简单而强大,就像X语言一样,但这太荒谬了!不需要安装XAMPP,也不需要安装一个带有节点的简单http服务器js来服务静态文件—只需一个命令和boom!非常感谢,节省了很多时间和麻烦。太棒了对于Windows上的Python,请使用:Python-m http.server 8080…或任何您想要的端口,当您想要退出它时,只需按ctrl-c.@Blairg23,请记住,此解决方案需要重新启动Chrome.exe的所有实例以使其正常工作,解释如何在chrome中使用它。@Priya不应该这样做,因为我建议仅在本地调试时使用chrome,并使用标志-允许从文件访问文件。这意味着使用Chrome进行普通网页浏览,并使用Chrome作为HTML文件的默认应用程序。请注意,fetch仍然拒绝这样做。你必须以某种方式使用如果你安装了php或者你已经安装了,你可以在你的文件夹中启动一个服务器:+1 for Web server for Chrome应用程序链接-这是迄今为止Chrome IMOIt为我保存的最简单、最干净的临时httpd安装解决方案。精确的解决方案太棒了!我们正要重写将JSON注入变量的方法。。但这是有效的!webView.getSettings.setAllowFileAccessFromFileURLstrue;重复回答不再是了。firefox和ie都在为我阻止cors请求。google chrome-允许从文件访问文件没有理由不起作用,而且更简洁吗?@agupta231 webbrowser模块有参数可以让你打开不同类型的窗口,例如在当前选项卡、新选项卡、新窗口中打开。完全相同的问题。“我不知道我使用的是没有http的:谢谢,@alexgray。你的方法对我有用。它可以用于其他浏览器吗?如果是,我怎么做?我用勇敢的浏览器试过了,但没用。