Прежде всего, я знаю, что доступ к методу canvas toDataURL
, когда исходное изображение происходит из другого источника, является проблемой безопасности.
но в моем случае я использую data:
url как источник моего img
, а затем используйте img
и нарисуйте его на canvas
, а затем вызовите canvas.toDataUrl
.
это отлично работает на Chrome и Firefox, но с ошибкой безопасности в IE!
любая идея?
...
var svgxml = getxmlsvg();
img.onload = function(){
canvas.drawImage(this, 0, 0);
canvas.toDataURL("image/png"); // <--- security error
}
image.src = URL.createObjectURL(new Blob([svgxml], {type: "image/svg+xml;charset=utf-8" }))
Вот цитата из svgopen.org
Перенос данных из SVG в Canvas имеет проблемы с безопасностью, которые вызывают Холст станет только для записи. Мы утверждаем, что эти проблемы могут быть избегать нашего предложения SVG.toDataURL() (раздел "Рекомендации" ).
Политика происхождения и происхождения холста
Веб-страницы состоят из разных элементов, происхождение. Элементы, исходящие из одного и того же источника, считаются безопасный [Origin10].
Canvas обладает мощными возможностями чтения и записи изображений. Это быть тривиальным, чтобы использовать холст в качестве посредника для переноса локального изображения на стороннего пользователя, просто загружая изображение в элемент Canvas из файла:// -URL, а затем отправляет данные пикселя из элемента Canvas на любой хост с JavaScript.
Чтобы предотвратить утечку информации с помощью Canvas, браузеры тщательно защита использования Canvas, когда источник данных изображения не является безопасно. Все элементы холста создаются в качестве атрибута "исходный чистый" установите значение true. Когда любое из действий, которые потенциально могут быть использованы для использование элемента Canvas для передачи содержимого, которое нарушает одно и то же происхождение политики, свойство origin-clean постоянно установлено в false.
Если методы, возвращающие данные пикселя, хранящиеся в холсте, например toDataURL() или getImageData(), вызываются в элементе Canvas, origin-clean - false, тогда возникает DOMException 18 SECURITY_ERR [Canvas10].
Но я создаю SVG на лету в браузере.