0

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 でテストすることはできません。

4

1 に答える 1