Ошибка AngularJS: перекрестные исходные запросы поддерживаются только для схем протоколов: http, data, chrome-extension, https
у меня есть три файла очень простого углового приложения js
.HTML-код
<!DOCTYPE html>
<html ng-app="gemStore">
<head>
<script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js'></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body ng-controller="StoreController as store">
<div class="list-group-item" ng-repeat="product in store.products">
<h3>{{product.name}} <em class="pull-right">{{product.price | currency}}</em></h3>
</div>
<product-color></product-color>
</body>
</html>
товар-цвет.HTML-код
<div class="list-group-item">
<h3>Hello <em class="pull-right">Brother</em></h3>
</div>
приложение.js
(function() {
var app = angular.module('gemStore', []);
app.controller('StoreController', function($http){
this.products = gem;
}
);
app.directive('productColor', function() {
return {
restrict: 'E', //Element Directive
templateUrl: 'product-color.html'
};
}
);
var gem = [
{
name: "Shirt",
price: 23.11,
color: "Blue"
},
{
name: "Jeans",
price: 5.09,
color: "Red"
}
];
})();
я начал получать эту ошибку, как только я ввел включить продукт-цвет.html с использованием пользовательской директивы productColor:
XMLHttpRequest cannot load file:///C:/product-color.html. Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, https, chrome-extension-resource.
angular.js:11594 Error: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'file:///C:/product-color.html'.
что может быть не так? Это вопрос пути для продукта-цвет.HTML-код?
все мои три файла находятся в одной корневой папке C:/user/project/
16 ответов:
эта ошибка происходит потому, что вы просто открываете html-документы непосредственно из браузера. Чтобы исправить это, вам нужно будет обслуживать ваш код с веб-сервера и получить к нему доступ на localhost. Если у вас есть Apache setup, используйте его для обслуживания ваших файлов. Некоторые IDE имеют встроенные веб-серверы, такие как JetBrains IDE, Eclipse...
Если у вас есть узел.JS setup, то вы можете использовать http-сервер. Просто беги
npm install http-server -gи вы сможете использовать его в терминал какhttp-server C:\location\to\app.
ОЧЕНЬ ПРОСТОЕ ИСПРАВЛЕНИЕ
- перейдите в каталог приложений
- Start SimpleHTTPServer
В терминале$ cd yourAngularApp ~/yourAngularApp $ python -m SimpleHTTPServerТеперь перейдите на localhost: 8000 в вашем браузере, и страница покажет
операция не разрешена в chrome. Вы можете либо использовать HTTP-сервер(Tomcat), либо использовать Firefox.
моя проблема была решена просто путем добавления
http://на мой url-адрес. например, я использовалhttp://localhost:3000/moviesвместоlocalhost:3000/movies.
Если вы используете это в браузере chrome/chromium(например: в Ubuntu 14.04), вы можете использовать одну из следующих команд для решения этой проблемы.
ThinkPad-T430:~$ google-chrome --allow-file-access-from-files ThinkPad-T430:~$ google-chrome --allow-file-access-from-files fileName.html ThinkPad-T430:~$ chromium-browser --allow-file-access-from-files ThinkPad-T430:~$ chromium-browser --allow-file-access-from-files fileName.htmlЭто позволит вам загрузить файл в chrome или chromium. Если вам нужно выполнить ту же операцию для windows, вы можете добавить этот переключатель в свойства ярлыка chrome или запустить его из
cmdс флагом. Эта операция не разрешена в Chrome, Opera, Internet Explorer по умолчанию. По умолчанию он работает только в Firefox и сафари. Следовательно, использование этой команды поможет вам.альтернативно вы также можете разместить его на любом веб-сервере (например:Tomcat-java,NodeJS-JS,Tornado-Python и т. д.) На основе того, какой язык вам удобен. Это будет работать из любого браузера.
Если по какой-то причине вы не может есть файлы, размещенные с веб-сервера и все еще нужен какой-то способ загрузки частичных файлов, вы можете прибегнуть к использованию
RootCause:
файловый протокол не поддерживает запрос cross origin для Chrome
Решение 1:
использовать протокол http вместо файла, что означает: настроить http-сервер, например apache, или nodejs+http-server
Sotution 2:
добавить --allow-file-access-from-files после назначения ярлыка Chrome и откройте новый экземпляр обзора с помощью этот ярлык
решение 3:
используйте Firefox вместо
Я бы добавил, что можно также использовать xampp, тип mamp вещей и поместить свой проект в папку htdocs, чтобы он был доступен на localhost
Если вы уже используете сервер, не забудьте использовать http:// в вызове API. Это может вызвать серьезные проблемы.
Причина
вы не открываете страницу через сервер, как Apache, поэтому, когда браузер пытается получить ресурс, он думает, что это из отдельного домена, что не допускается. Хотя некоторые браузеры это позволяют.
Решение
запустите inetmgr и разместите свою страницу локально и просмотрите как http://localhost:portnumber/PageName.HTML-код или через веб-сервер, как Apache, nginx, узел так далее.
альтернативно используйте другой браузер Ошибка не была показана при непосредственном открытии страницы с помощью Firefox и Safari. Он поставляется только для Chrome и IE (xx).
Если вы используете редакторы кода, такие как скобки, Sublime или Notepad++, эти приложения обрабатывают эту ошибку автоматически.
эта проблема не происходит в Firefox и Safari. Убедитесь, что вы используете последнюю версию xml2json.js. Потому что я столкнулся с ошибкой синтаксического анализатора XML в IE. В Chrome лучше всего вы должны открыть его на сервере, таком как Apache или XAMPP.
- установите http-сервер, запустив команду
npm install http-server -g- откройте терминал в пути, где находится индекс.HTML-код
- выполнить команду
http-server . -o- наслаждайтесь!
вы должны открыть Chrome, используя следующий флаг Перейдите в меню Выполнить и введите "chrome -- disable-web-security --user-data-dir"
убедитесь, что все экземпляры chrome закрыты, прежде чем использовать флаг для открытия chrome. Вы получите предупреждение безопасности, которое указывает, что CORS включен.
добавление в @Kirill Fuchs отличное решение и ответ на сомнение @StackUser - при запуске http-сервера установите путь только до папки приложения, а не до html-страницы!
http-server C:\location\to\appи кindex.htmlподappпапку
У меня была та же проблема. после добавления кода ниже в мое приложение.js файл это исправлено.
var cors = require('cors') app.use(cors());

Comments