N'ai-je pas assez dormi ou quoi? Ce code suivant
var frame=document.getElementById("viewer");
frame.width=100;
frame.height=100;
var ctx=frame.getContext("2d");
var img=new Image();
img.src="http://www.ansearch.com/images/interface/item/small/image.png"
img.onload=function() {
// draw image
ctx.drawImage(img, 0, 0)
// Here's where the error happens:
window.open(frame.toDataURL("image/png"));
}
lance cette erreur:
SECURITY_ERR: DOM Exception 18
Il n'y a aucun moyen que cela ne fonctionne pas! Quelqu'un peut-il expliquer cela, s'il vous plaît?
javascript
html
canvas
cross-domain
pop850
la source
la source
Réponses:
Dans les spécifications, il est dit:
Si l'image provient d'un autre serveur, je ne pense pas que vous puissiez utiliser toDataURL ()
la source
La définition de l'attribut d'origine croisée sur les objets d'image a fonctionné pour moi (j'utilisais fabricjs)
Pour ceux qui utilisent fabricjs, voici comment patcher Image.fromUrl
la source
Si l'image est hébergée sur un hôte qui définit soit Access-Control-Allow-Origin ou Access-Control-Allow-Credentials, vous pouvez utiliser le partage de ressources cross-origin (CORS). Voir ici (l'attribut crossorigin) pour plus de détails.
Votre autre option est que votre serveur dispose d'un point de terminaison qui récupère et diffuse une image. (par exemple http: // your_host / endpoint? url = URL ) L'inconvénient de cette approche est la latence et la récupération théoriquement inutile.
S'il y a d'autres solutions alternatives, je serais intéressé à en entendre parler.
la source
Il semble qu'il existe un moyen d'éviter que si l'hébergement d'images est capable de fournir les en-têtes HTTP suivants pour les ressources d'image et que le navigateur prend en charge CORS:
Il est indiqué ici: http://www.w3.org/TR/cors/#use-cases
la source
Enfin j'ai trouvé la solution. Il suffit d'ajouter le
crossOrigin
troisième paramètre dansfromURL
funcla source
J'ai eu le même problème et toutes les images sont hébergées dans le même domaine ... Donc, si quelqu'un a le même problème, voici comment j'ai résolu:
J'avais deux boutons: un pour générer la toile et un autre pour générer l'image à partir de la toile. Cela n'a fonctionné que pour moi, et désolé de ne pas savoir pourquoi, quand j'ai écrit tout le code sur le premier bouton. Donc, quand je clique dessus, génère la toile et l'image en même temps ...
J'ai toujours ce problème de sécurité lorsque les codes étaient sur des fonctions différentes ... = /
la source
J'ai pu le faire fonctionner en utilisant ceci:
Écrivez ceci sur la première ligne de votre
.htaccess
sur votre serveur sourceEnsuite, lors de la création d'un
<img>
élément, procédez comme suit:la source
Vous ne pouvez pas mettre d'espaces dans votre pièce d'identité
Mettre à jour
Je suppose que l'image est sur un serveur différent de celui sur lequel vous exécutez le script. J'ai pu dupliquer votre erreur lors de son exécution sur ma propre page, mais cela a bien fonctionné au moment où j'ai utilisé une image hébergée sur le même domaine. C'est donc lié à la sécurité - mettez l'image sur votre site. Quelqu'un sait pourquoi c'est le cas?
la source
Si vous dessinez simplement des images sur un canevas, assurez-vous de charger les images du même domaine.
www.example.com est différent de example.com
Assurez-vous donc que vos images et l'url que vous avez dans votre barre d'adresse sont les mêmes, www ou non.
la source
J'utilise fabric.js et je pourrais résoudre ce problème en utilisant toDatalessJSON au lieu de toDataURL:
Edit: Nevermind. Il en résulte que l'image d'arrière-plan est uniquement exportée vers JPG, sans le dessin sur le dessus, ce n'est donc pas tout à fait utile après tout.
la source