Вот как я тестировал поддержку CORS tained canvas. Если у кого-то есть способ без необходимости загружать изображение, пожалуйста, опубликуйте его здесь:
function CanvasFunctions() {
var _initialized = false, _corsNotSupported = false;
function DrawImage(image, src) {
jQuery.when(initialized()).then(function () {
if (_corsNotSupported) {
image.src = GetProxyImage(src);
} else {
image.src = src;
}
}
}
function initialized() {
if (_initialized) {
return true;
}
var dfd = $.Deferred();
var src = 'http://example.com/corsImage.jpg',
image.onload = function () {
var canvas = document.createElement('canvas');
canvas.width = 250;
canvas.height = 250;
var ctx = canvas.getContext('2d');
ctx.drawImage(image, 0, 0, 200, 200);
try {
var hit = ctx.getImageData(0, 0, 1, 1).data[3] > 1;
console.log('Canvas was not tainted by CORS image, hit: ' + hit);
} catch (e) {
console.log('Canvas was tainted by CORS image, reverting to passthru for images');
_corsNotSupported = true;
}
_initialized = true;
dfd.resolve(true);
});
image.src = src;
return dfd.promise();
}
}