GeoExt を使用してマップを印刷するための PDF ファイルを生成しようとしていますが、問題が発生しました。Chrome では、次のエラー メッセージが表示されます。
XMLHttpRequest cannot load http://Howard:8080/geoserver/pdf/create.json. Origin http://localhost:55608 is not allowed by Access-Control-Allow-Origin.
エラーメッセージは、プロキシに関係していることを示していると思うので、Config.yamlに以下を追加しようとしましたが、うまくいきませんでした:
- !localMatch
dummy: true
- !ipMatch
host: 0.0.0.0
mask: 0.0.0.0
これにより、すべてのローカル IP アドレスとすべてのホストが Howard:8080 の create.json にアクセスできるようになるはずでしたが、何らかの理由でエラー メッセージが引き続き表示されます。
ただし、Firefox では、動作が少し異なります。エラーメッセージは表示されませんが、エラーメッセージ「通信障害。
私は立ち往生していて、アイデアがありません。誰か助けてもらえますか?
コードは次のとおりです。
var printProvider = new GeoExt.data.PrintProvider({
//method: "GET", // "POST" recommended for production use
method: "POST", // "POST" recommended for production use
//capabilities: g_printCapabilities, // provide url instead for lazy loading
url: OpenLayers.ProxyHost + "http://Howard:8080/geoserver/pdf/",
//url: "http://Howard:8080/geoserver/pdf/",
autoLoad: true,
customParams: {
mapTitle: "GeoExt Printing Demo",
comment: "This demo shows how to use GeoExt.PrintMapPanel with OSM"
}
});
var printPage = new GeoExt.data.PrintPage({
printProvider: printProvider
});
var mapPanel = new GeoExt.MapPanel({
title: "Map",
region: "center",
height: 400,
width: 600,
map: map,
bbar: ["->", {
text: "Print",
handler: function() {
// convenient way to fit the print page to the visible map area
printPage.fit(mapPanel, true);
printProvider.print(mapPanel, printPage);
}
}]
});
// create a panel and add the map panel and grid panel
// inside it
var mainPanel = new Ext.Panel({
renderTo: "mainpanel",
layout: "border",
height: 800,
width: 600,
items: [mapPanel]
});
編集:
JavaScript で次のコードを追加しました。
var invocation = new XMLHttpRequest();
var url = 'http://Howard:8080/geoserver/pdf/create.json';
function callOtherDomain() {
if(invocation) {
invocation.open('POST', url, true);
invocation.onreadystatechange = function (){
alert("invocation.onreadystatechange");
}
invocation.send();
}
}
callOtherDomain();
しかし、それでもエラーメッセージが表示されます。Howard サーバーに Access-Control-Allow-Origin ヘッダーを追加する必要がありますか? もしそうなら、どうすればいいですか?
編集2:
コードビハインドに以下を追加しました。
Response.AddHeader("Access-Control-Allow-Origin", "*");
Response.AddHeader("Access-Control-Allow-Headers", "POST");
Response.AddHeader("Access-Control-Allow-Headers", "GET");
また、次のものを配置しました。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
私のweb.configファイルでpdfファイルを呼び出すマシンに両方のコードブロックが追加されましたが、まだ運がありません。
編集 3.
ベクターレイヤーを含めない場合、pdfファイルは正しく生成されるようです。これは Firefox と chrome で機能します。IE には別の問題があるため、IE でテストすることはできません。