1. 程式人生 > >openlayers wms 和 canvas toDataURL的跨域問題

openlayers wms 和 canvas toDataURL的跨域問題

專案有個需求要把openlayers的地圖轉成base64用來匯出,本來以為可以和echarts一樣,用canvas的toDataURL就簡單解決了,結果給我報了這個錯誤:

Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

原來是跨域了,而echarts生成的canvas不存在跨域的圖片當然可以用toDataURL。網上查到的解決方法是新增crossOrigin:

new ol.source.TileWMS({
   crossOrigin: 'anonymous'
   //...
})

這裡的crossOrigin有兩種值可配置,anonymous和use-credentials,只要crossOrigin的屬性值不是use-credentials,全部都會解析為anonymous,所以有的地方會寫成crossOrigin: ''。

滿心歡喜的以為解決了,結果頁面又報了這個錯:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

意思就是響應頭裡沒有Access-Control-Allow-Origin這個引數,那為啥openlayers官網的例子可以匯出呢?看了下官網瓦片圖的響應頭,還真的有下面的引數:

access-control-allow-origin: *

還是讓後臺幫忙改下geoServer配置吧。