The canvas has been tainted by cross-origin data in chrome only -
uncaught securityerror: failed execute 'getimagedata' on 'canvasrenderingcontext2d': canvas has been tainted cross-origin data
i getting above error in chrome. code(following) works fine in mozilla. have not corss domain issue. why above error in chrome?
var wheel_canvas, wheel_context, can_w, can_h, wheel_grd; var large_radius = 160; var small_radius = 120; var wheel_canvas = document.getelementbyid('wheel_canvas'); var wheel_context = wheel_canvas.getcontext('2d'); var can_w = $(wheel_canvas).width(); var can_h = $(wheel_canvas).height(); var centerx = can_w / 2, centery = can_h / 2; var wheel_grd = null; test('#ff0000'); function test(hex) { $('#clrpicker').css({'left': 210, 'top': 210 }); inverted = hexbw(hex); $('#color_val_show').val(hex); current_color_hex_val_selected = hex; $('#color_val_show').css({'color':inverted,'background':hex}); fillgradientcirle(hex); } function fillgradientcirle(hex) { wheel_context.rect(0, 0, can_w, can_h); wheel_grd = wheel_context.createlineargradient(1, 1, 0, can_w, can_h); wheel_grd.addcolorstop(1, '#ffffff'); wheel_grd.addcolorstop(0.5, hex); wheel_grd.addcolorstop(0, '#000000'); wheel_context.fillstyle = wheel_grd; wheel_context.beginpath(); wheel_context.arc(centerx, centery, large_radius, 0, 2 * math.pi); wheel_context.fill(); } $(wheel_canvas).click(function (e) { $.event.fix(e); x = e.pagex; y = e.pagey; can_p = $(this).offset(); x = x - $(document).scrollleft() - can_p.left; // fixed typo y = y - $(document).scrolltop() - can_p.top; if (math.sqrt((x - centerx) * (x - centerx) + (y - centery) * (y - centery)) < small_radius) return; // precaution $('#wheel_picker').css({ 'left': x-8 + 'px', 'top': y-8 + 'px' }); var data = wheel_context.getimagedata(x, y, 1, 1).data; pixeldata = data; rgbstring = 'rgb(' + pixeldata[0] + ', ' + pixeldata[1] + ', ' + pixeldata[2] + ')'; hex = rgb2hex(rgbstring); inverted = hexbw(hex); $('#color_val_show').val(hex); current_color_hex_val_selected = hex; $('#color_val_show').css({'color':inverted,'background':hex}); $('#feedback').html("coordinates : " + x + "," + y + " color: " + hex); });
if code , don't use cross-origin images error stand out line:
wheel_grd = wheel_context.createlineargradient(1, 1, 0, can_w, can_h);
this should have four arguments not five. last argument may trip out chrome in way.
try changing to:
// x0 y0 x1 y1 wheel_grd = wheel_context.createlineargradient(1, 0, can_w, can_h);
other errors can consider looking at:
- you declaring variables twice - first var line in example code unnecessary
- you reading css size of canvas element, not bitmap size (they not same).
to read proper dimension of canvas (unless intended read css size reason) need use following instead:
var can_w = wheel_canvas.width; //$(wheel_canvas).width(); var can_h = wheel_canvas.height; //$(wheel_canvas).height();
or if insist on using jquery:
var can_w = $(wheel_canvas).prop('width'); var can_h = $(wheel_canvas).prop('height');
hope helps!
Comments
Post a Comment