Toile HTML5 getImageData et règle de même origine
J'ai un site en cours d'exécution à pixie.strd6.com et des images hébergées par le biais d'Amazon S3 avec un CNAME pour images.pixie.strd6.com.
Je voudrais être capable de dessiner ces images en HTML5 canvas et appeler la getImageData méthode, mais elle jette Error: SECURITY_ERR: DOM Exception 18
J'ai essayé de réglage window.domain = "pixie.strd6.com"
mais qui n'a pas d'effet.
En outre, $.get("http://dev.pixie.strd6.com/sprites/8516/thumb.png?1293830982", function(data) {console.log(data)})
jette aussi une erreur: XMLHttpRequest cannot load http://dev.pixie.strd6.com/sprites/8516/thumb.png?1293830982. Origin http://pixie.strd6.com is not allowed by Access-Control-Allow-Origin.
Idéalement HTML5 canvas ne bloquerait pas l'appel de getImageData
de sous-domaines. J'ai regardé dans la fixation d'un Access-Control-Allow-Origin-tête dans la S3, mais je n'ai pas réussi.
De l'aide ou des solutions de contournement sont grandement appréciés.
source d'informationauteur Daniel X Moore
Vous devez vous connecter pour publier un commentaire.
Amazon a récemment annoncé le soutien de la SCRO
Comment faire pour activer la SCRO
Une solution possible est d'utiliser nginx pour agir en tant que proxy. Voici comment configurer l'url va http://pixie.strd6.com/s3/ pour passer de S3, mais le navigateur peut encore croire qu'il est non-cross domain.
Si vous utilisez PHP, vous pouvez faire quelque chose comme:
Et d'accès à l'image en utilisant ce fichier php, comme si le fichier est appelé generateImage.php vous pouvez faire
<img src="http://GENERATEPHPLOCATION/generateImage.php"/>
et l'image externe de l'url peut être un paramètre get pour le fichierRécemment, je suis tombé sur
$.getImageData
par Max Novakovic. La page inclut un couple de chouettes démos de l'extraction et de l'exploitation sur Flickr des photos, ainsi que quelques exemples de code.Il vous permet d'extraire d'une image en JavaScript manipulable formulaire à partir d'un site arbitraire. Il fonctionne en ajoutant un script à la page. Le script demande à l'image de Google App Engine serveur. Le serveur récupère l'image demandée et les relais qu'il soit converti en base64 pour le script. Lorsque le script reçoit le base64, il transmet les données à un rappel, qui peut ensuite dessiner sur une toile et commencer à jouer avec elle.
Dans le passé, Amazon S3 ne vous permettra pas de modifier ou d'ajouter de l'access-control-allow-origin et access-control-allow-pouvoirs en-têtes HTTP de sorte qu'il aurait été préférable de passer à un autre service, comme Rackspace Cloud Fichiers ou d'un autre service qui ne.
Ajouter ou modifier les en-têtes HTTP, comme ceci:
Voir http://www.w3.org/TR/cors/#use-cases pour plus d'informations.
À l'aide d'un service qui vous permet de modifier les en-têtes HTTP entièrement résout l'origine du problème.
Pour les personnes qui n'utilisent pas de S3 peut essayer de construire une image de proxy qui codent pour le fichier image et l'envelopper dans un objet JSON.
Ensuite, vous pouvez utiliser JSONP qui soutient la croix de domaine pour aller chercher de l'objet JSON et affecter les données de l'image à l'img.src .
J'ai écrit un code d'exemple de l'image du serveur proxy avec Google App Engine.
https://github.com/flyakite/gae-image-proxy
L'objet JSON retourne dans le format comme ce
Les 'données' est les données d'image au format base64. L'attribuer à une image.
L'image est maintenant "propre" pour votre toile.
Pour modifier votre S3 seau autorisations:
1) connectez-vous à AWS Management Console et ouvrez le Amazon S3 console à https://console.aws.amazon.com/s3/
2) Dans les Seaux liste, ouvrez le seau dont vous souhaitez afficher les propriétés, puis cliquez sur "ajouter de la SCRO configuration"
3) Écrire les règles que vous êtes prêt à ajouter entre les balises
<CORSConfiguration>
Vous pouvez en apprendre plus sur les règles à: http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html
4) Spécifier crossorigin= "anonyme" sur l'image que vous utiliserez dans votre toile
Ce comportement est par la conception. Par la spec HTML5, dès que vous dessinez une croix d'origine de l'image d'une toile, c'est sale et vous ne pouvez plus lire les pixels. Origine-correspondance compare le schéma complet de l'hôte, et non IE navigateurs, le port.
Juste tombé sur le même problème. J'ai découvert les catégories de documents qui pourraient être utiles.
http://html5-demos.appspot.com/static/html5-whats-new/template/index.html#14
Il n'a pas de travail pour moi depuis que je suis en train de manipuler une image provenant de Flickr. Donc, je suis toujours à la recherche de la solution.