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

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -