OpenLayers 3にJavaScriptアプリケーションがあり、ベースレイヤーはローカルタイルから作成されます。私は自分のコンピューターでのみ働いているので、なぜCORSエラーがあるのかわかりません。
var newLayer = new ol.layer.Tile({
source: new ol.source.OSM({
url: 'E:/Maperitive/Tiles/vychod/{z}/{x}/{y}.png'
})
});
var schladming = [21.6187, 48.7327]; // longitude first, then latitude
// since we are using OSM, we have to transform the coordinates...
var schladmingWebMercator = ol.proj.fromLonLat(schladming);
var map = new ol.Map({
layers: [
newLayer
],
controls: [],
target: 'mapid',
view: new ol.View({
center: schladmingWebMercator,
zoom: 10,
minZoom: 10,
maxZoom: 14
})
});
コンソールからのエラーメッセージ:
Origin
null
からのfile:///E:/Maperitive/Tiles/vychod/10/573/352.png
の画像へのアクセスがCORSポリシーによってブロックされました:無効な応答。したがって、Originnull
はアクセスを許可されていません。
画像URLをダブルクリックすると、画像が開きます。何が間違っているのでしょうか?私は前にそのエラーが一度もなかった。
CORSエラーが発生しています。
ローカルファイルシステムを使用してファイルにアクセスしようとしても、うまくいきません。
Origin
は、ローカルファイルシステムであるため、nullです。このpngファイルをHost可能性はありますか?
代わりに、これらのファイルをAWS S3バケットにホストします。その後、http
プロトコルではなく、file
プロトコルを使用できます。 ORローカルシステムにhttpサーバーをセットアップし、http
をlocalhost
に使用して、すべてをローカルに保ちたい場合にファイルを提供します。
カバーの下には、何らかの形式のURLロードリクエストがあります。このメソッドを介してローカルファイルシステムから画像やその他のコンテンツを読み込むことはできません。
画像はWebサーバー経由でロードする必要があるため、適切なhttp URL経由でアクセスします。
この問題は、OpenLayers OSMソースにcrossOrigin:nullを提供することで実際に解決されました。
var newLayer = new ol.layer.Tile({
source: new ol.source.OSM({
url: 'E:/Maperitive/Tiles/vychod/{z}/{x}/{y}.png',
crossOrigin: null
})
});
これに対する解決策は、コードを提供し、サーバー上で実行させることです。chromeのWebサーバーを使用して、ページを簡単に提供できます。
この場合、CORS問題はOpenLayersで間違ったソースコンストラクターを使用したことが原因です。 ol.source.OSMは、WebからデフォルトのOpenStreetMapタイルにアクセスするためのものであり、そのため、デフォルトではcrossOrigin: 'anonymous'に設定されています。ローカルソースURLを使用している場合、crossOrigin設定をデフォルトにしない汎用ol.source.XYZコンストラクターを使用する必要があります(これが、上記のcrossOrigin:nullの設定が機能する理由です)。また、たとえばモバイルデバイスのSDカードなど、マップにファイルプロトコルを使用することは完全に合法です。
私はまったく同じ問題を抱えていました。私の場合、上記の解決策のいずれも機能しませんでしたが、私にとってそれは次を追加することでした:
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
基本的に、すべてを許可。
これは安全にローカルで実行している場合にのみ安全であることに注意してください。
CORSをバイパスしてみてください:
Chromeの場合:ショートカットを編集するか、cmdを使用:C:\ Chrome.exe --disable-web-security
Firefoxの場合:Firefoxを開き、URLバーにabout:configと入力します。検索:security.fileuri.strict_Origin_policyをfalseに設定