AngularJSエラー:クロスオリジンリクエストはプロトコルスキームでのみサポートされています:http、data、chrome-extension、https


130

非常に単純な角度のjsアプリケーションの3つのファイルがあります

index.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>

product-color.html

<div class="list-group-item">
    <h3>Hello <em class="pull-right">Brother</em></h3>
</div>

app.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"
              }
  ];

})();

productColorという名前のカスタムディレクティブを使用してproduct-color.htmlのインクルードを入力するとすぐに、このエラーが発生し始めました。

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'.

何がうまくいかないのでしょうか?product-color.htmlのパスの問題ですか?

私の3つのファイルはすべて同じルートフォルダにあります C:/user/project/


1
私の場合など、私が誤ってTLDをポート " localhost:8070.com "に追加した場合のように、愚かなことをすると、同じエラーが発生します。解決しようとしているURLを確認してください!
Wildhoney


回答:


306

このエラーは、ブラウザから直接HTMLドキュメントを開いているために発生します。これを修正するには、ウェブサーバーからコードを提供し、ローカルホストでアクセスする必要があります。Apacheが設定されている場合は、それを使用してファイルを提供します。JetBrains IDE、Eclipseなど、一部のIDEにはWebサーバーが組み込まれています...

Node.Jsを設定している場合は、http-serverを使用できます。実行するだけでnpm install http-server -g、のようなターミナルで使用できますhttp-server C:\location\to\app


6
優れたソリューション!
ホルヘ

3
http-serverは、私がローカルでホスティングするのを見た中で最も簡単な方法です。注:Windowsにnpmがない場合は、node.jsをインストールするだけで、cmdで使用できるようになります。
Octane

3
そして、それがandroidのwebviewで発生した場合、どうすればよいですか?
Dr.jacky 2015年

2
好奇心から、なぜWebブラウザでファイルを開くことができないのですか?
tobiak777

3
@reddyプレーンでシンプル:ブラウザーがコンピューター上のファイルシステムに直接アクセスすることはセキュリティ上の問題です。
Alex J

49

非常に簡単な修正

  1. アプリのディレクトリに移動します
  2. SimpleHTTPServerを起動する


ターミナルで

$ cd yourAngularApp
~/yourAngularApp $ python -m SimpleHTTPServer

次に、ブラウザーでlocalhost:8000に移動すると、ページが表示されます


8
Python 3では、それはであるべきですpython -m http.server
Luan Nico、2015

1
これは大いに役立ちました!素晴らしいソリューション。
mirta 2017年

42

この操作はChromeでは許可されていません。HTTPサーバー(Tomcat)を使用するか、代わりにFirefoxを使用できます。


4
私の状況では代わりにFirefoxを使用しましたが、動作します。ChromeはFirefoxよりもセキュリティが強化されていますか?なぜ私がこれを許可されているのか...
thatOneGuy

それが私にとって最良の答えです。
Thomas

1
短くてシンプル...
viks

本当に私も助けてくれました。
Ram Dutt Shukla、2016年

1
ねえ..どうもありがとう..あなたの答えはとても大きな助けでした...私の時間の多くを節約しました
Megha

31

私の問題はhttp://、URLアドレスに追加するだけで解決しました。たとえば、のhttp://localhost:3000/movies代わりに使用しましたlocalhost:3000/movies


13

これを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ショートカットのプロパティにこのスイッチを追加するかcmd、フラグを付けて実行することができます。この操作は、Chrome、Opera、Internet Explorerではデフォルトで許可されていません。デフォルトでは、FirefoxとSafariでのみ機能します。したがって、このコマンドを使用すると役立ちます。

あるいは、使い慣れた言語に基づいて、任意のWebサーバー(例:Tomcat-java、NodeJS-JS、Tornado-Pythonなど)でホストすることもできます。これはどのブラウザからでも機能します。


12

何らかの理由でファイルをウェブサーバーからホストできず、パーシャルをロードする何らかの方法が必要な場合は、ngTemplateディレクティブを使用することで解決できます。

この方法では、index.htmlファイルのスクリプトタグ内にマークアップを含めることができ、実際のディレクティブの一部としてマークアップを含める必要はありません。

これをindex.htmlに追加してください

<script type='text/ng-template' id='tpl-productColour'>
 <div class="list-group-item">
    <h3>Hello <em class="pull-right">Brother</em></h3>
</div>
</script>

次に、ディレクティブで:

app.directive('productColor', function() {
      return {
          restrict: 'E', //Element Directive
          //template: 'tpl-productColour'
          templateUrl: 'tpl-productColour'
      };
   }
  );

この投稿を既に編集しているため、templateUrl: 'tpl-productColor'
HANU

5

根本的な原因:

ファイルプロトコルはChromeのクロスオリジンリクエストをサポートしていません

解決策1:

ファイルの代わりにhttpプロトコルを使用します。つまり、Apacheなどのhttpサーバー、またはnodejs + http-serverをセットアップします。

ソリューション2:

Chromeのショートカットターゲットの後に--allow-file-access-from-filesを追加し、このショートカットを使用して新しい参照インスタンスを開きます

ここに画像の説明を入力してください

解決策3:

代わりにFirefoxを使用してください


Firefoxの使用が助けになりました
Vineeth Subbaraya 2017


4

xampp、mampタイプのものを使用してプロジェクトをhtdocsフォルダーに配置し、localhostからアクセスできるようにすることもできます



1

理由

Apacheなどのサーバーを介してページを開いていないため、ブラウザーがリソースを取得しようとしたときに、別のドメインからのものであると見なされ、許可されません。一部のブラウザでは許可されていますが。

ソリューション

inetmgrを実行してページをローカルでホストし、http:// localhost:portnumber / PageName.htmlとして、またはApache、nginx、nodeなどのWebサーバーを介して参照します。

または、別のブラウザーを使用するFirefoxとSafariを使用してページを直接開くと、エラーは表示されませんでした。ChromeとIE(xx)にのみ付属しています。

Brackets、Sublime、Notepad ++などのコードエディターを使用している場合、これらのアプリはこのエラーを自動的に処理します。


1

この問題は、FirefoxとSafariでは発生しません。xml2json.jsの最新バージョンを使用していることを確認してください。IEでXMLパーサーエラーに直面したからです。Chromeでは、ApacheやXAMPPなどのサーバーで開く必要があります。



0

次のフラグを使用してChromeを開く必要があります。メニューに移動して「chrome --disable-web-security --user-data-dir」と入力します。

フラグを使用してクロムを開く前に、クロムのすべてのインスタンスが閉じていることを確認してください。CORSが有効であることを示すセキュリティ警告が表示されます。


0

@Kirill Fuchsの優れたソリューションに追加し、@ StackUserの疑問に答えます-http-serverの起動中に、htmlページではなく、アプリフォルダーまでのパスを設定してください! http-server C:\location\to\appとフォルダのindex.html下にアクセスapp


0

C:/user/project/index.htmlに移動し、Visual Studio 2017で開くか、[ファイル]> [ブラウザーで表示]またはCtrl + Shift + Wを押します。


-1

同じ問題がありました。以下のコードを私のapp.jsファイルに追加した後、修正されました。

var cors = require('cors')
app.use(cors());
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.