を使用して 3D モデルを Three.js にロードしようとしていますがJSONLoader
、その 3D モデルは Web サイト全体と同じディレクトリにあります。
エラーが発生してい"Cross origin requests are only supported for HTTP."
ますが、何が原因で、どのように修正するのかわかりません。
を使用して 3D モデルを Three.js にロードしようとしていますがJSONLoader
、その 3D モデルは Web サイト全体と同じディレクトリにあります。
エラーが発生してい"Cross origin requests are only supported for HTTP."
ますが、何が原因で、どのように修正するのかわかりません。
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
) 場合、それらは異なる発信元として扱われます。
明確にするために-はい、エラーは、ブラウザを直接ポイントできないことを示していますfile://some/path/some.html
ブラウザがローカル ファイルをレンダリングできるように、ローカル Web サーバーをすばやく起動するためのいくつかのオプションを次に示します。
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 インストールに組み込まれています。
同じ手順を実行しますが、代わりに次のコマンドを使用しますpython3 -m http.server
または、より応答性の高いセットアップが必要で、すでに nodejs を使用している場合...
http-server
入力してインストールnpm install -g http-server
あなたがsome.html
住んでいる作業ディレクトリに移動します
を発行して http サーバーを起動します。http-server -c-1
これにより、ディレクトリ内のファイルを静的ファイルとして提供する Node.js httpd がスピンアップし、http://localhost:8080
好みの言語が Ruby の場合 ... Ruby の神々は、これも同様に機能すると言っています。
ruby -run -e httpd . -p 8080
もちろん、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;
});
});
唯一の違いは、http://
コードの 2 番目のスニペットに がないことです。
同様の問題を抱えている人が他にいる場合に備えて、それを公開したかっただけです。
URL をhttp://localhost
の代わりに に変更するだけですlocalhost
。ローカルから html ファイルを開く場合は、その html ファイルを提供するローカル サーバーを作成する必要があります。最も簡単な方法は、Web Server for Chrome
. これで問題は解決します。
Android アプリでは、たとえば、JavaScript が 経由でアセットにアクセスできるようにするために、 を呼び出して取得した をfile:///android_asset/
使用setAllowFileAccessFromFileURLs(true)
します。WebSettings
getSettings()
WebView
私にとって最速の方法は、WindowsユーザーがFirefoxでファイルを実行して問題を解決したか、Chromeを使用したい場合は、Python 3をインストールしてコマンドプロンプトからコマンドを実行し、 http://localhost:8000/python -m http.server
にアクセスすることでした。 次に、ファイルに移動します
python -m http.server
Python または Node.js を使用しない Windows の場合は、まだ軽量のソリューション、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 エラーは問題なく処理されます。
スクリプトを名前を付けて保存しserver.ps1
、プロジェクトのルートで実行します。配置されたディレクトリで index.html を起動します。
一部の回答ですでに言及されていると思われますが、これを少し変更して、完全に機能する回答を作成します(見つけて使用しやすくします)。
https://nodejs.org/en/download/にアクセスします。node.js をインストールします。
コマンド プロンプトからコマンドを実行して http-server をインストールしますnpm install -g http-server
。
index.html
/が存在する作業ディレクトリに移動しyoursome.html
ます。
コマンドを実行して http サーバーを起動しますhttp-server -c-1
html ファイル名に応じて、http://localhost:8080
または- へのWeb ブラウザを開きます。http://localhost:8080/yoursome.html
ローカル ディレクトリの json ファイルを使用しているブラウザに HTML ファイルをロードすると、この正確なエラーが発生しました。私の場合、静的コンテンツのサーバーを許可する単純なノード サーバーを作成することで、これを解決できました。これのコードは this other answerに残しました。
皆さんのためにMacOS
... シンプルなLaunchAgentをセットアップして、これらの魅力的な機能を自分のChromeのコピーで有効にします...
plist
名前を付けて(launch.chrome.dev.mode.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>
起動時に起動するはずですが、端末コマンドを使用していつでも強制的に起動できます
launchctl load -w ~/Library/LaunchAgents/launch.chrome.dev.mode.plist
多田!
ローカル ファイルの読み込みが機能する 1 つの方法は、プロジェクト フォルダーの外ではなく、プロジェクト フォルダー内でそれらを使用することです。画像用に作成する方法と同様に、プロジェクトのサンプル ファイルの下に 1 つのフォルダーを作成し、プロジェクト パス以外の完全なローカル パスを使用し、プロジェクト フォルダーの下のファイルの相対 URL を使用するセクションを置き換えます。それは私のために働いた
ええと。私はいくつかの公式の言葉を見つけたところです。ビルド システム)" https://dojotoolkit.org/documentation/tutorials/1.10/cdn/
これには多くの問題があります。私の問題には「/」があり ません。 /getList_tagLabels/
この問題に遭遇した人にとって、これが役立つことを願っています。