2013-01-05 16 views
15

Così ho messa a punto cors sul mio AWS S3 secchio:Canvas con e Immagine caricato da AWS S3 utilizzando cors non funziona primi due carichi

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
    <CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    </CORSRule> 
</CORSConfiguration> 

Nel mio html

<div id="explain_canvas"></div> 

Nella mia javascript Sto caricando un'immagine e inserendola in un'immagine su tela.

var outlineImage = new Image(); 
outlineImage.crossOrigin = ''; 
outlineImage.src = drawing_image; 
outlineImage.onload = function() { 
    var canvasDiv = document.getElementById('explain_canvas'); 
    var canvas = document.createElement('canvas'); 
    canvas.setAttribute('width', 722); 
    canvas.setAttribute('height', 170); 
    canvas.setAttribute('id', 'canvas_'+canvas_element); 
    canvas.setAttribute('name', 'canvas_'+canvas_element); 
    canvasDiv.appendChild(canvas); 
    if(typeof G_vmlCanvasManager != 'undefined') { 
    canvas = G_vmlCanvasManager.initElement(canvas); 
    } 
    var context = canvas.getContext("2d"); 
    context.drawImage(outlineImage, 10, 10, 600, 150); 
} 

Sto caricando il contesto in modo che sia compatibile con Internet Explorer.

Ecco il mio problema. Quando la pagina viene caricato le prime due volte, si tratta con questo errore:

Cross-origin image load denied by Cross-Origin Resource Sharing policy. 

Tuttavia, quando ho ricaricare la pagina un paio di volte, finirà per lavorare e caricare l'immagine. Una volta fatto, sono in grado di chiamare con successo aDataURL() sull'elemento canvas.

Qualcuno sa perché questo accade? Ho fatto un errore? È un problema con AWS e dovrò solo aspettare che Amazon risolva il cors?

Sta succedendo in tutti i browser che ho provato. In Chrome, Firefox, Safari, IE. Sul mio Mac, PC e iPhone. Quindi non penso che sia collegato al browser. Inoltre, accade localmente e in produzione.

Grazie!

+0

È possibile includere i browser nei quali si sta verificando questo errore? Hai detto che sei "compatibile con internet explorer", ma non se l'errore sta accadendo in IE o in qualche altro browser. – monsur

+0

Sta succedendo in tutti i browser che ho testato. In Chrome, Firefox, Safari, IE. Sul mio Mac, PC e iPhone. Quindi non penso che sia collegato al browser. Inoltre, accade localmente e in produzione. – bfcoder

risposta

9

A quanto pare i browser non inviano un'intestazione di origine nelle intestazioni della richiesta. E aws richiede che l'origine sia inviata. Non sono sicuro del perché questo sarebbe il caso. L'intestazione di origine dovrebbe essere inviata anche con una semplice richiesta HTTP. Ahimè, non lo è.

E here è il motivo per cui il capo di origine non è stato inviato.

+3

E [qui] (http://stackoverflow.com/questions/14228839/all-of-my-browsers-are-not-sending-the-origin-header) è il motivo per cui il capo di origine non è stato inviato. – bfcoder

+0

Questo è così strano. Posso ottenere un'immagine da caricare quando l'origine NON è presente. Quando è presente, è in quel momento che Safari (solo safari) non caricherà l'immagine perché "Caricamento di immagini di origine incrociata negato dal criterio di condivisione delle risorse tra origini". – teewuane

+0

ottimo lavoro @bfcoder –